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

2015-01-24信息快讯网

今天在处理bug的时候,又发现一个奇怪的问题,在设置mysql的编码为gbk的情况下,发现建立出来的表,凡是表结构无论是字段还是表结构描述是中文的时候,建立出来的表结构描述是乱码,经过排查原来是character_set_client=binary惹的祸

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都说是“大部分为了解决乱码问题而设置”,却不知,这个对表结构描述竟然反而乱码了。到底这个是什么作用呢?表结构的时候又为什么不一样呢?
PHP session_start()问题解疑(详细介绍)
深入解析fsockopen与pfsockopen的区别
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
如何在Ubuntu下启动Apache的Rewrite功能
如何解决CI框架的Disallowed Key Characters错误提示
Smarty foreach控制循环次数的实现详解
解析array splice的移除数组中指定键的值,返回一个新的数组
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
解析php php_openssl.dll的作用
浅析PKI加密解密 OpenSSL
php pki加密技术(openssl)详解
file_get_contents("php://input", "r")实例介绍
解析link_mysql的php版
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
解析在zend Farmework下如何创立一个FORM表单
解析file_get_contents模仿浏览器头(user_agent)获取数据
领悟php接口中interface存在的意义
PHPEXCEL 使用小记
Could not load type System.ServiceModel.Activation.HttpModule解决办法
php中unlink()、mkdir()、rmdir()等方法的使用介绍
zend framework配置操作数据库实例分析
windows下zendframework项目环境搭建(通过命令行配置)
PHP提示Notice: Undefined variable的解决办法
PHP gbk环境下json_dencode传送来的汉字
thinkphp3.0 模板中函数的使用
thinkPHP的Html模板标签使用方法
Zend Studio去除编辑器的语法警告设置方法
Zend的AutoLoad机制介绍
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
巧用php中的array_filter()函数去掉多维空值的代码分享
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
php 调试利器debug_print_backtrace()
UCenter 批量添加用户的php代码
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
PHP sprintf() 函数的应用(定义和用法)
header中Content-Disposition的作用与使用方法
©2014-2024 dbsqp.com