程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 關於mysql字符集設置了character_set_client=binary 在gbk情況下會出現表描述是亂碼的情況

關於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都說是“大部分為了解決亂碼問題而設置”,卻不知,這個對表結構描述竟然反而亂碼了。到底這個是什麼作用呢?表結構的時候又為什麼不一樣呢?
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved