mysql中文乱码问题各种解决办法
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-08 13:16:34 浏览: 评论:0
mysql中文乱码出现的方式各种各样,如有中文显示乱码,读出乱码,写入数据库乱码,导入中文乱码等等各种各样的问题,下面我来给大家介绍,解决mysql中文乱码问题方法地,有需要了解的朋友可进入参考.
修改mysql配置解决乱码.
首先:用show variables like “%colla%”;show varables like “%char%”;这两条命令查看数据库与服务端的字符集设置.
如果查看出来都是gbk2312,或 gbk,那么就只能支持简体中文,繁体和一些特殊符号是不能插入的,我们只有修改字符集为UTF-8.
修改方法如下:用记事本或UitraEdit打开mysql数据库安装目录下的my.ini文件打开, 然后Ctrl+F搜索default-character-set,将后面的字符集修改为UTF8,注意要修改两个地方,一个事客户端的,一个是服务端的.
然后保存,重启mysql服务、、进去继续用show variables like “%colla%”;show varables like “%char%”;着两条语句查询一下字符集.
数据表和连接部分的编码设置,设置数据库和数据表编码.
要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码,如果没有指明,将是默认的latin1.
用得最多的应该是这3种字符集 gb2312,gbk,utf8,如何去指定数据库和数据表的字符集呢?下面也gbk为例,在MySQL Command Line Client创建数据库,代码如下:
- mysql> CREATE TABLE `mysqlcode` (
- -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
- -> `content` VARCHAR( 255 ) NOT NULL
- -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
- Query OK, 0 rows affected, 1 warning (0.03 sec)
其中后面的代码如下:
TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库,当然也可以通过如下指令修改数据库数据表的字符集:
alter database mysqlcode default character set 'gbk'.
前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去,但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置.
“连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作,如果不信,你现在可以执行下面的sql文试一试,代码如下:
mysql> insert into mysqlcode values(null,'java爱好者');
按回车,结果如下:ERROR 1406 (22001): Data too long for column 'content' at row 1
设置连接编码,设置了服务器、数据库和数据表部分的编码,必须设置连接编码,连接编码设置如下:
- mysql> SET character_set_client='gbk';
- mysql> SET character_set_connection='gbk'
- mysql> SET character_set_results='gbk'
设置好连接编码,下面便可以成功插入中文了,代码如下:
- mysql> insert into mysqlcode values(null,'java爱好者');
- Query OK, 0 rows affected (0.02 sec)
其实,上面设置连接编码的三条命令可以简化为一条,代码如下:
mysql> set names 'gbk';
设置好了连接编码后,在select查询时,也能正确显示中文,代码如下:
- mysql> select * from mysqlcode;
- +----+-----------+
- | id | content |
- +----+-----------+
- | 1 | java爱好着 |
- +----+-----------+
- 1 row in set (0.00 sec)
查询mysql中文记录乱码问题,我们这里以gb2312编码乱码为实例来介绍,如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,代码如下:
- create table my_table ( name varchar(20) binary not null default'')type=myisam default charset latin1;
附:旧数据升级办法
以原来的字符集为latin1为例,升级成为utf8的字符集,原来的表:old_table (default charset=latin1),新表:new_table(defaultcharset=utf8).
第一步:导出旧数据,代码如下:
- mysqldump --default-character-set=latin1 -hlocalhost -uroot -Bmy_db --tables old_table > old.sql
第二步:转换编码,代码如下:
iconv -t utf-8 -f gb2312 -c old.sql > new.sql
在这里,假定原来的数据默认是gb2312编码.
第三步:导入,修改old.sql,增加一条sql语句:"SET NAMES utf8;",保存,代码如下:
mysql -hlocalhost -uroot my_db < new.sql
大功告成.
mysql导入数据乱码解决
出现乱码语句:mysql -hlocalhost -uroot -proot test<d:/test.sql
正确的语句:mysql -hlocalhost -uroot -proot test<d:/test.sql --default-character-set=utf8
解决mysql导入导出数据乱码问题,首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8,例如下面的代码:
- mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql
那么导入数据的时候也要使用--default-character-set=utf8,代码如下:
mysql -uroot -p --default-character-set=utf8 dbname < bak.sql
这样统一编码就解决了mysql数据迁移中的乱码问题了.
Tags: MYSQL中文乱码 PHP中文乱码
相关文章
- ·常见的导致mysql中文乱码问题(2014-09-27)
- ·mysql中文乱码问题解决方法总结(2014-10-03)
- ·Mysql控制台显示中文乱码解决办法(2014-10-03)
- ·mysqldump备份数据库中文乱码解决方法(2014-10-07)
- ·mysql source导入中文乱码解决方法(2014-10-07)
- ·MySQL中文汉字乱码问题分析(2014-10-08)
- ·MySql中文乱码问题解决办法(2014-10-09)
- ·Navicat连接mysql数据库中文显示乱码解决方法(2014-10-10)
- ·mysql导入导出数据中文乱码解决方法总结(2014-10-10)
- ·解决mysql的默认字符编码和中文乱码问题(2014-10-13)
- ·mysql中文乱码问题解决方法(2014-10-17)
- ·PHP读取MYSQL数据库中文乱码的解决方法(2014-10-04)
- ·MySQL5 数据库中文乱码问题的解决方法(2015-04-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)