MySQL latin1字符集中文乱码解决方案

木木老贼 互联网营销达人~

出面mysql中文乱码最多的就是数据库编码的问题了,如果我们数据库编码是latin1字符集,但我们直接保存gbk就有可能出现中文乱码了,下面我总结了一些解决办法.

先看我的实例,字符集出现错误解决办法,出现的问题:

  1. mysql>updateusers
  2. ->setusername='关羽'
  3. ->whereuserid=2;
  4. ERROR1366(HY000):Incorrectstringvalue:'xB9xD8xD3xF0'forcolumn'usern
  5. ame'atrow1

向表中插入中文字符时,出现错误,代码如下:

  1. mysql>select*fromusers;
  2. +--------+----------+
  3. |userid|username|
  4. +--------+----------+
  5. |2|????|
  6. |3|????|
  7. |4|?í?ù|
  8. +--------+----------+
  9. 3rowsinset(0.00sec)

对数据库操作:以下是查看字符集和排序方式的命令,用phpmyadmin可以直接用sql方式运行myql>之后的命令:

  1. mysql>SHOWVARIABLESLIKE'character_set_%';
  2. +————————–+—————————-+
  3. |Variable_name|Value|
  4. +————————–+—————————-+
  5. |character_set_client|latin1|
  6. |character_set_connection|latin1|
  7. |character_set_database|latin1|
  8. |character_set_results|latin1|
  9. |character_set_server|latin1|
  10. |character_set_system|latin1|
  11. |character_sets_dir|/usr/share/mysql/charsets/|
  12. +————————–+—————————-+
  13. 7rowsinset(0.00sec)
  14. mysql>SHOWVARIABLESLIKE'collation_%';
  15. +———————-+——————-+
  16. |Variable_name|Value|--phpfensi.com
  17. +———————-+——————-+
  18. |collation_connection|latin1_swedish_ci|
  19. |collation_database|latin1_swedish_ci|
  20. |collation_server|latin1_swedish_ci|
  21. +———————-+——————-+
  22. 3rowsinset(0.00sec)

使用php读出数据,需要加入:mysql_query("SET NAMES 'LATIN1'")

此时会发现latin1输出的中文乱码在页面显示已经可以正常,页面的编码是gbk,这时正常就说明读取出来的中文字是gbk编码的了,再插入utf8存储的数据库时因为数据格式不正常,无法正常插入,此时就需要用php来进行数据的转码.

iconv('gbk','utf-8',XXXXX);

这里要注意,如果要导入到utf8字符集的DB中是设定的原先插入到latin1 db中的原始编码格式,本文中的测试后确定为gbk编码,转为utf8,因此用网页的编码方式不断调试输出,直到页面呈现正常的中文字符为止,这种方法可以逆向推出插入db时的中文字符编码格式.

MySQL 5.5的修改字符集编码为UTF8,彻底解决中文乱码问题.

最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值,注意配置的字段细节:

1、在[client]字段里加入default-character-set=utf8,如下:

  1. [client]
  2. port=3306
  3. socket=/var/lib/mysql/mysql.sock
  4. default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

  1. [mysqld]
  2. port=3306
  3. socket=/var/lib/mysql/mysql.sock
  4. character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

  1. [mysql]
  2. no-auto-rehash
  3. default-character-set=utf8

修改完成后,service mysql restart重启mysql服务就生效,注意:[mysqld]字段与[mysql]字段是有区别的.

相关广告
  • MySQL latin1字符集中文乱码解决方案 MySQL latin1字符集中文乱码解决方案 MySQL latin1字符集中文乱码解决方案
相关阅读

MySQL latin1字符集中文乱码解决方案

2019/10/10 17:35:24 | 谷歌SEO算法 | 5G标准出炉

mysql字符集乱码解决方法总结

2019/10/10 17:33:31 | 谷歌SEO算法 | GDPR