关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况_php技巧

mysql链接建立之后,通过如下方式设置编码:

复制代码 代码如下:

mysql_query("SET character_set_connection=" . $GLOBALS['charset'] . ",character_set_results=" . $GLOBALS['charset'] . ",character_set_client=binary", $this->link);

然而建立出来的表结构描述竟然是乱码:

复制代码 代码如下:

mysql> show create table nw_admin_config\G
*************************** 1. row ***************************
Table: nw_admin_config
Create Table: CREATE TABLE `nw_admin_config` (
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '��������',
`namespace` varchar(15) NOT NULL DEFAULT 'global' COMMENT '���������ռ�',
`value` text COMMENT '����ֵ',
`vtype` enum('string','array','object') NOT NULL DEFAULT 'string' COMMENT '����ֵ����',
`description` text COMMENT '���ý���',
PRIMARY KEY (`namespace`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='��վ���ñ�'

经过排查,发现竟然是character_set_client=binary惹的祸:

复制代码 代码如下:

$targetDb->query("SET NAMES '{$charset}'");

复制代码 代码如下:

mysql> show create table nw_admin_config\G
*************************** 1. row ***************************
Table: nw_admin_config
Create Table: CREATE TABLE `nw_admin_config` (
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '配置名称',
`namespace` varchar(15) NOT NULL DEFAULT 'global' COMMENT '配置命名空间',
`value` text COMMENT '缓存值',
`vtype` enum('string','array','object') NOT NULL DEFAULT 'string' COMMENT '配置值类型',
`description` text COMMENT '配置介绍',
PRIMARY KEY (`namespace`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='网站配置表'

但是,如果我设置的字符集是UTF8的,表结构也是utf8,那么即使是使用的上面的character_set_client=binary,表结构的描述正常:

复制代码 代码如下:

mysql> show create table nw_admin_config\G
*************************** 1. row ***************************
Table: nw_admin_config
Create Table: CREATE TABLE `nw_admin_config` (
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '配置名称',
`namespace` varchar(15) NOT NULL DEFAULT 'global' COMMENT '配置命名空间',
`value` text COMMENT '缓存值',
`vtype` enum('string','array','object') NOT NULL DEFAULT 'string' COMMENT '配置值类型',
`description` text COMMENT '配置介绍',
PRIMARY KEY (`namespace`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='网站配置表'

而奇怪的事,乱码情况只有表结构中的描述中才存在,对于插入的数据中文却还是正常的~

网上查了character_set_client=binary都说是“大部分为了解决乱码问题而设置”,却不知,这个对表结构描述竟然反而乱码了。到底这个是什么作用呢?表结构的时候又为什么不一样呢?

时间: 2024-11-14 12:30:58

关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况_php技巧的相关文章

MySQL 字符集设置

/*************************************************************************** * MySQL 字符集设置 * 说明: * 数据库这块很多时候都会因为字符集不兼容导致数据通信异常,所以这边把 * MySQL的字符集设定为utf-8,这个比较通用. * * 2016-9-24 深圳 南山平山村 曾剑锋 **************************************************************

深入Mysql字符集设置分析_Mysql

基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding).例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码: • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set).例如,给定字符列表为{'A','B'}时,{'A'=>0, 'B'=>1}就是一个字符集: •

深入Mysql字符集设置[精华结合]_Mysql

基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding).例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码: • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set).例如,给定字符列表为{'A','B'}时,{'A'=>0, 'B'=>1}就是一个字符集: •

深入Mysql字符集设置 图文版_Mysql

在mysql客户端与mysql服务端之间,存在着一个字符集转换器. character_set_client          =>gbk:转换器就知道客户端发送过来的是gbk格式的编码 character_set_connection=>gbk:将客户端传送过来的数据转换成gbk格式 character_set_results        =>gbk: 注:以上三个字符集可以使用set names gbk来统一进行设置 例子: create table test( name varc

Linux下进行MYSQL编程时插入中文乱码的解决方案_php技巧

插入中文是乱码,尝试了许多方法,比如我先把vim里设置为:set fileencoding=utf-8不起作用,后来想想也对,和vim没什么关系 然后就尝试c#代码,用Encoding.UTF8.GetString()方法,后来也不对. 我就郁闷了,忽然想起来莫不是mysql的设置问题??? 于是,sudo nano /etc/mysql/my.cnf 插入下面红色代码,default-character-set = utf8,成功,不乱码了~~~根本不用什么Encoding..... # Th

防止MySQL注入或HTML表单滥用的PHP程序_php技巧

MySQL注入的意图是接管网站数据库并窃取信息.常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管理信息. MySQL之所以流行,是因为它与最流行的服务器端脚本语言PHP一起使用.而且,PHP是主导互联网的Linux- Apache服务器的主要语言.因此,这意味着黑客可以很容易地利用PHP就像Windows的间谍软件一样. 黑客向一个无担保的网页表单输入大量恶意代码(通过下拉菜单,搜索框,联系表单,查询表单和复选框). 恶意代码将被送到MySQL数据库,

PHP连接MySQL查询结果中文显示乱码解决方法_php技巧

我们首先假设数据库中采用的编码为UTF-8这时我们在PHP页面中应当首先添加 复制代码 代码如下: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 此处charset的值utf-8必须与文件保存时的编码类型一样 之后在数据库查询前添加 复制代码 代码如下: mysql_query("set names 'utf8'"); 该行语句的编码值也应当

PHP+MySQL存储数据常见中文乱码问题小结_php技巧

本文实例总结了PHP+MySQL存储数据常见中文乱码问题.分享给大家供大家参考,具体如下: PHP+MySQL出现中文乱码的常见原因: 1. MYSQL数据库的编码是utf8,与PHP网页的编码格式不一致,就会造成MYSQL中的中文乱码. 2. 使用MYSQL中创建表.或者选择字段时设置的类型不是utf8,而网页编码不是utf8,也可能造成MYSQL中文乱码. 3. PHP页面的字符集与数据库的编码不一致. 4. PHP连接MYSQL数据库,操作是设定的语句指定的编码和页面编码,PHP页面编码不

php列出mysql表所有行和列的方法_php技巧

本文实例讲述了php列出mysql表所有行和列的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <html> <head> <title>Selecting Data</title> </head> <body> <?php $user = "root"; $pass = ""; $db = "mydatabase"; $link = mysql_