相同的SQL:SELECT hex('好');
我在phpMyAdmin环境下执行,返回的是:E5A5BD
我在mysql命令行下,返回的是:BAC3
我写个简单的存储过程,将结果写到表中,在mysql命令行下调用存储过程,插入的数据也是6位的为什么这样?如何保持一致?
我想取4位的结果,可以减少文件的大小,对查询速度有影响吗?
4位的可以满足汉字/日文/韩文等非拉丁文的需求吗?
我在phpMyAdmin环境下执行,返回的是:E5A5BD
我在mysql命令行下,返回的是:BAC3
我写个简单的存储过程,将结果写到表中,在mysql命令行下调用存储过程,插入的数据也是6位的为什么这样?如何保持一致?
我想取4位的结果,可以减少文件的大小,对查询速度有影响吗?
4位的可以满足汉字/日文/韩文等非拉丁文的需求吗?
show variables like 'char%';
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
==========mysqld==========
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
- “好”字的utf8是3字节存储数据的,所以hex结果是有“六位”。你可以使用ultraEditor等可以转换编码及查看十六进制的编辑器来测试各种编码下的对应十六进制。
- 要显示多语言的话,建议使用 utf8。当然,其实数据库里存放什么编码没关系,只要客户端能够解释你存储的数据就可以。
- 你说“在mysql命令行下调用存储过程,插入的数据也是6位的”,这时候已经和服务器打交道了,影响就不只是“客户端”的设置了,可能表或库的字符集就是 utf8 的。改成别的字符集就会变成别的位数。
- mysql 里可以用 convert 函数来转移字符编码,测试的时候很好用:
mysql> select hex(convert('好' using utf8)), convert('好' using utf8);
+-------------------------------+--------------------------+
| hex(convert('好' using utf8)) | convert('好' using utf8) |
+-------------------------------+--------------------------+
| E5A5BD | 好 |
+-------------------------------+--------------------------+
1 row in set (0.00 sec)
mysql> select hex(convert('好' using gb2312)), convert('好' using gb2312);
+---------------------------------+----------------------------+
| hex(convert('好' using gb2312)) | convert('好' using gb2312) |
+---------------------------------+----------------------------+
| 3F3F | ?? |
+---------------------------------+----------------------------+
1 row in set (0.00 sec)mysql> select hex(convert('好' using latin1)), convert('好' using latin1);
+---------------------------------+----------------------------+
| hex(convert('好' using latin1)) | convert('好' using latin1) |
+---------------------------------+----------------------------+
| BAC3 | 好 |
+---------------------------------+----------------------------+
1 row in set (0.00 sec)
重新启动MYSQL服务导出数据,在统一的字符集下重新建立表,再导入数据