MySQL latin1字符集中文乱码解决方案
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-03 22:21:02 浏览: 评论:0
出面mysql中文乱码最多的就是数据库编码的问题了,如果我们数据库编码是latin1字符集,但我们直接保存gbk就有可能出现中文乱码了,下面我总结了一些解决办法.
先看我的实例,字符集出现错误解决办法,出现的问题:
- mysql> update users
- -> set username='关羽'
- -> where userid=2;
- ERROR 1366 (HY000): Incorrect string value: 'xB9xD8xD3xF0' for column 'usern
- ame' at row 1
向表中插入中文字符时,出现错误,代码如下:
- mysql> select * from users;
- +--------+----------+
- | userid | username |
- +--------+----------+
- | 2 | ???? |
- | 3 | ???? |
- | 4 | ?í?ù |
- +--------+----------+
- 3 rows in set (0.00 sec)
对数据库操作:以下是查看字符集和排序方式的命令,用phpmyadmin可以直接用sql方式运行myql>之后的命令:
- 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 | latin1 |
- | character_sets_dir | /usr/share/mysql/charsets/ |
- +————————–+—————————-+
- 7 rows in set (0.00 sec)
- mysql> SHOW VARIABLES LIKE 'collation_%';
- +———————-+——————-+
- | Variable_name | Value | --phpfensi.com
- +———————-+——————-+
- | collation_connection | latin1_swedish_ci |
- | collation_database | latin1_swedish_ci |
- | collation_server | latin1_swedish_ci |
- +———————-+——————-+
- 3 rows in set (0.00 sec)
使用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,如下:
- [client]
- port = 3306
- socket = /var/lib/mysql/mysql.sock
- default-character-set=utf8
2、在[mysqld]字段里加入character-set-server=utf8,如下:
- [mysqld]
- port = 3306
- socket = /var/lib/mysql/mysql.sock
- character-set-server=utf8
3、在[mysql]字段里加入default-character-set=utf8,如下:
- [mysql]
- no-auto-rehash
- default-character-set=utf8
修改完成后,service mysql restart重启mysql服务就生效,注意:[mysqld]字段与[mysql]字段是有区别的.
Tags: MySQL字符集 MySQL乱码
相关文章
- ·MySQL字符集编码的理解分析(2014-09-25)
- ·MySQL中DATE_FORMATE函数内置字符集解析(2014-09-25)
- ·mysql字符集编码设置与查看命令(2014-09-27)
- ·mysql改变表table的字符集sql语句(2014-09-27)
- ·Liunx如何修改MySQL字符集(2014-09-28)
- ·mysql服务器字符集查询和设置方法(2014-10-07)
- ·mysql字符集乱码解决方法总结(2014-10-13)
- ·mysql字符集和数据库引擎修改方法(2014-10-14)
- ·mysql字符集latin1迁移utf8的方法(2015-04-18)
- ·常见的导致mysql中文乱码问题(2014-09-27)
- ·mysql中文乱码问题解决方法总结(2014-10-03)
- ·Mysql控制台显示中文乱码解决办法(2014-10-03)
- ·MySQL数据导入还原时乱码问题(2014-10-04)
- ·mysql source 命令导入数据乱码问题(2014-10-08)
- ·mysql导入乱码问题解决办法(2014-10-08)
- ·解决mysql导入导出数据乱码办法(2014-10-09)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)