Mysql中插入汉字出现乱码问题
2012-08-06 12:48
316 查看
这段时间用tomcat+mysql练习,发现一插入汉字的话就出现乱码,网上找了很多资料,像在连接字符串的地方设置字符集,发现都没有解决问题,后来研究了一下mysql字符集的结构,终于解决问题。
MySQL服务端不加任何参数启动时,如下面所示(下面中同样显示了我的mysql版本):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/dc8d96d8fceceaf42310fbe6bfb2e3a0.gif)
我的字符集配置中character_set_database和character_set_server为utf8,这是由于我本身的Mysql配置文件my.ini中设置的为utf8的原因造成的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/237f5ac34c8e2a4788f733b6d3613ad9.gif)
此时,可以发现,写入的数据是乱码(我这个里面显示为空,但数据存在1行);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/012f4298182b23574ac4efa712012932.gif)
然后,更改服务器启动时的字符集,或是修改配置文件my.ini中的字符集
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/aecc82c2992dab7d6e59fc03864ff555.gif)
此时,可以发现原来写入的数据仍然不能正常显示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/1ad089683a6c26fa916a4bb17e2b7176.gif)
然后,插入汉字字符,显示仍然为乱码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/acd9ac62fc02632e2511390c31cd10f9.gif)
通过如上测试可以发现,如果只在客户端设置character_set_results那么不管服务器端是什么字符集时建立、插入汉字的表都显示不正确。如果再设定character_set_client,仍然不能影响由于设置character_set_results所产生的影响。
设置character_set_results
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/7cc72ff0262a84546fbdce19de467a95.gif)
设置character_set_client
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/ace38495e782681d700a5e1344d5a46d.gif)
然后,如果再设定character_set_connection,不会影响已经建立和插入的表,在新建立、插入汉字的表就能正确显示
原有表不发生变化
新建插入表和汉字字符,显示正常:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/dc9f0f2e777c3862fcd0ca6ec6d70269.gif)
我们可以查看一下此时各个表的表结构及其他们的字符集:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/79a37729a9721edf88572f30c788580d.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/3f5f406c05d84c4eb534266f59a6417c.gif)
总结一下,如果你的插入或是显示字符出现乱码,那么多半是由于你的数据库字符集出现了问题。如果要想正确显示汉字,必须同时设定character_set_client和 character_set_connection参数和服务器端指定字符集保持一致,才能正确插入、显示。
如果只是要显示以前带字符集正确插入汉字的表,可以只在客户端指定character_set_results 就够了。
附可以正确显示汉字字符的的mysql 字符集配置供参考:
[cpp:firstline[1]] view plaincopy
[client]
default-character-set=gbk
port=3306
[server]
default-character-set=gbk
port=3306
[mysql]
default-character-set=gbk
[mysqld]
port=3306
basedir=C:/Program Files/MySQL/mysql/
datadir=C:/Program Files/MySQL/mysql/data/
default-character-set=gbk
default-storage-engine=INNODB
MySQL服务端不加任何参数启动时,如下面所示(下面中同样显示了我的mysql版本):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/dc8d96d8fceceaf42310fbe6bfb2e3a0.gif)
我的字符集配置中character_set_database和character_set_server为utf8,这是由于我本身的Mysql配置文件my.ini中设置的为utf8的原因造成的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/237f5ac34c8e2a4788f733b6d3613ad9.gif)
此时,可以发现,写入的数据是乱码(我这个里面显示为空,但数据存在1行);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/012f4298182b23574ac4efa712012932.gif)
然后,更改服务器启动时的字符集,或是修改配置文件my.ini中的字符集
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/aecc82c2992dab7d6e59fc03864ff555.gif)
此时,可以发现原来写入的数据仍然不能正常显示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/1ad089683a6c26fa916a4bb17e2b7176.gif)
然后,插入汉字字符,显示仍然为乱码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/acd9ac62fc02632e2511390c31cd10f9.gif)
通过如上测试可以发现,如果只在客户端设置character_set_results那么不管服务器端是什么字符集时建立、插入汉字的表都显示不正确。如果再设定character_set_client,仍然不能影响由于设置character_set_results所产生的影响。
设置character_set_results
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/7cc72ff0262a84546fbdce19de467a95.gif)
设置character_set_client
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/ace38495e782681d700a5e1344d5a46d.gif)
然后,如果再设定character_set_connection,不会影响已经建立和插入的表,在新建立、插入汉字的表就能正确显示
原有表不发生变化
新建插入表和汉字字符,显示正常:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/dc9f0f2e777c3862fcd0ca6ec6d70269.gif)
我们可以查看一下此时各个表的表结构及其他们的字符集:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/79a37729a9721edf88572f30c788580d.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/3f5f406c05d84c4eb534266f59a6417c.gif)
总结一下,如果你的插入或是显示字符出现乱码,那么多半是由于你的数据库字符集出现了问题。如果要想正确显示汉字,必须同时设定character_set_client和 character_set_connection参数和服务器端指定字符集保持一致,才能正确插入、显示。
如果只是要显示以前带字符集正确插入汉字的表,可以只在客户端指定character_set_results 就够了。
附可以正确显示汉字字符的的mysql 字符集配置供参考:
[cpp:firstline[1]] view plaincopy
[client]
default-character-set=gbk
port=3306
[server]
default-character-set=gbk
port=3306
[mysql]
default-character-set=gbk
[mysqld]
port=3306
basedir=C:/Program Files/MySQL/mysql/
datadir=C:/Program Files/MySQL/mysql/data/
default-character-set=gbk
default-storage-engine=INNODB
相关文章推荐
- MySQL插入显示汉字出现乱码问题的解决
- MySQL插入显示汉字出现乱码问题的解决
- 利用编程语言向mysql中插入中文出现乱码的问题
- 解决Hibernate向MySQL插入中文出现乱码的问题
- NavicatforMySQL插入数据出现乱码最近Navicat遇到个很蛋疼的问题,就是建立好数据
- 关于用php插入汉字到oracle中出现不乱码问题
- 乱码插入mac mysql汉字乱码问题解决
- hibernate中向mysql数据库插入汉字出现???乱码问题的纠正
- JSP MySQL插入数据时出现中文乱码问题的解决方法
- python向mysql数据库插入汉字出现乱码问题
- Mysql插入中文出现乱码问题
- JSP MySQL插入数据时出现中文乱码问题的解决方法
- Mysql乱码问题; 在java中,向数据库中插入数据出现乱码
- 在MAC下 Mysql 插入中文记录出现问号乱码的问题
- Mysql中添加汉字乱码无法识别问题
- jquery Ajax 传递汉字到 servlet 时出现乱码的问题
- VS2010中汉字拷贝到Word出现乱码问题解决
- 如何解决jsp+mysql出现的中文乱码问题
- Java 向mysql插入中文数据乱码问题
- SQL Server插入中文数据出现乱码问题