REASON1
mysql默认编码都是latin1,察看方式:
mysql> SHOW VARIABLES LIKE ”character_set_%”;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | binary |
| character_sets_dir | D:\Program Files\mysql-5.6.24-winx64\share\charsets\ |
+————————–+—————————-+
7 rows in set (0.00 sec)
ERROR1
此时通过Navicat插入汉字,一保存就会显示成乱码。
FIND1
上网查了下资料,主要是:
http://blog.youkuaiyun.com/shupan001/article/details/6248080
注意,如果某个表有些字段在latin下编辑过了,更改表和数据库的编码后,进行汉字编辑还是乱码。
那是因为这个表的这些字段的编码还是latin1,输入命令进行察看就知道了。
HANDLE1
运行:SET NAMES “UTF8”; (好像是,记不清了)
它的作用相当于:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
通过Navicat插入汉字显示正常。
REASON2
此时
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | binary |
| character_sets_dir | D:\Program Files\mysql-5.6.24-winx64\share\charsets\ |
+————————–+—————————-+
ERROR2
通过java代码向表中插入汉字,还是俩问号。url结尾加上?useUnicode=true&characterset=utf-8也是。
FIND2
既然只有character_set_server这个漏网之鱼,那估计就是它喽,想要更改它还挺麻烦。
网上的三个方法:
1、SET character_set_server = utf8;
对其他项貌似有用,但对它没用,改完后重启mysql立刻恢复原状。
2、有教程说可以运行设置向导,位置在X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe
我这个版本的mysql相应目录就没有这个文件。好像高版本的这个文件被取消了。
3、更改mysql根目录下的my.ini,添加一行character_set_server = utf8,重启mysql
亲测可用
HANDLE2
更改后,插入汉字,一切正常