读mysql数据库中的中文乱码
原有数据库和表都是GBK编码的,我用mysql console 显示中文没有问题,但我使用mysql workbench GUI tools和拿vc程序读都是乱码。它们俩中文乱码是不一样的,workbench GUI 中数据本身没有问题,只是它说是需要UTF8编码,所以就乱码了。而vc程序读中文数据,把中文本身的编码都乱套了,后面全是问号(?)。
网上搜集了很多的资料,基本可以确定为字符集的问题。但把字符集设个遍还是搞不定。都搞了好几天了,还是不行,哪位高手帮忙解决下!谢谢!
mysql及数据库中的数据的详细信息如下:
mysql> show variables like 'char%';
+--------------------------+----------------------------------------------------
-----+
| Variable_name | Value
|
+--------------------------+----------------------------------------------------
-----+
| character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database | gbk
|
| character_set_filesystem | binary
|
| character_set_results | gbk
|
| character_set_server | gbk
|
| character_set_system | utf8
|
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+
mysql> show variables like 'collation%';
+----------------------+----------------+
| Variable_name | Value |
+----------------------+----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | gbk_chinese_ci |
| collation_server | gbk_chinese_ci |
+----------------------+----------------+
3 rows in set (0.00 sec)
mysql> show create table beijing;
+---------+---------------------------------
| Table | Create Table
| beijing | CREATE TABLE `beijing` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varbinary(255) NOT NULL DEFAULT '
' COMMENT '????¤??????
??',
`level` tinyint(3) NOT NULL DEFAULT '0',
`parent` varbinary(64) DEFAULT '-1
',
`pcid` int(11) unsigned NOT NULL DEFAULT '0',
`longtitude` int(11) DEFAULT '-1' COMMENT '????(NTU)',
`latitude` int(11) DEFAULT '-1' COMMENT '????(NTU)',
`geo` varchar(100) NOT NULL DEFAULT '',
`admincode` int(11) unsigned NOT NULL DEFAULT '0',
`cid` int(11) unsigned NOT NULL DEFAULT '0',
`next` int(11) unsigned DEFAULT '0' COMMENT '??????????????CID',
`cityid` smallint(6) NOT NULL DEFAULT '0' COMMENT '?????¨°??',
`valid` tinyint(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `CIDIndex` (`cid`),
KEY `NameIndex` (`name`),
KEY `level_index` (`level`),
KEY `admincode_index` (`admincode`),
KEY `pcid_index` (`pcid`),
KEY `parent_index` (`parent`),
KEY `cityid_index` (`cityid`)
) ENGINE=InnoDB AUTO_INCREMENT=346454 DEFAULT CHARSET=gbk COMMENT='????' |
------解决方案--------------------照你上边描述的字符集,不应该是乱码。可能当初你建表时使用UTF8进行创建的。
不过,那些comment都无所谓了。
你在C程序里,获取完连接以后,set names 'gbk'
再获取数据,应该能得到正确的中文显示。前提是数据是在gbk编码下进行插入的。
------解决方案--------------------
在你的 mysql workbench GUI tools和拿vc程序 中也先支持一下命令 set names 'gbk';
------解决方案--------------------
关键是你的记录是在什么字符集下插入的,
SET NAMES GBK,
再插入记录,再取出来,看看是否正常
------解决方案--------------------其實是甚麼也不用設定的,
MYSQL提供了5種編程語言2個平臺的接口,
只要你全是用UNICODE,
甚麼語言,甚麼平臺都不會亂碼,
越是設定就越亂碼。
我自己試過到這里下載6個接口,http://www.mysql.com/products/connector/
用6個語言2個平臺對同一個MYSQL寫入讀出都不會有亂碼,