彻底解决mysql中文乱码的办法

MySQL会出现中文乱码的原因不外乎下列几点:
1.server本身设定问题,例如还停留在latin1
2.table的语系设定问题(包含character与collation)
3.客户端程式(例如php)的连线语系设定问题
强烈建议使用utf8!!!
utf8可以兼容世界上所有字符!!!

Linux下Mysql插入中文显示乱码解决方案

mysql -u root -p 回车输入密码

进入mysql查看状态如下:
彻底解决mysql中文乱码的办法
mysql不能插入中文
默认的是客户端和服务器都用了latin1,所以会乱码。
解决方案:
mysql>user mydb;
mysql>alter database mydb character set utf8;!

另一种方法是直接修改默认的Mysql配置文件

在debian环境下,彻底解决mysql无法插入中文和中文乱码的办法

上面提到了用临时方法更改数据库的字符集设置,显示中文,但是后来发现在有的系统下并不能成功,比如我用的debian 7.0,找了好久终于找到一个适合debian系统的解决方案,debian 7.0下测试成功,其他诸如修改client和mysql加入default-character-set=utf8的方法之类的,只适用与5.5以前的系统!

终极决绝方案,一劳永逸:

debian下mysql的字符串修改为utf8(参考:rainysia的专栏)

一、进入mysql(mysql -uroot -p),查看当前数据库字符集(status;)

二、查看当前系统版本(lsb_release -a)
彻底解决mysql中文乱码的办法
Mysql不能插入中文

三、#vim /etc/mysql/my.cnf 。(5.5以前系统)
在【client】下面加入 default-character-set=utf8

在【mysqld】下面加入default-character-set=utf8

Notice:注意 如果修改后不能启动报错试试把default-character-set=utf8改为character_set_server=utf8,仅仅加入到mysqld下面的.client就不需要加了

四、#vim /etc/mysql/my.cnf 。(5.5以后系统)如下修改

[client]
default-character-set=utf8

[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

五、重启mysql(/etc/init.d/mysql stop /etc/init.d/mysql start)

六、修成成功,进入mysql查看字符集(mysql>show variables like ‘character_set_%’?
彻底解决mysql中文乱码的办法

使用Navicat for mysql 建表后,输入中文等相关数据后,保存再看就是??,输入几个中文显示几个? ;咨询同事 说是改字符集,但是也无效,后来发现是因为之前字符集就是latin1; 所以一系列修改后,还需要将字段的类型也改掉才可以。方法如下

彻底解决mysql中文乱码的办法
工具
Navicat for sql
cmd 命令行
方法
我用的是命令行方式修改,如下:

  1. 进入cmd命令,进入mysql的bin目录下,启动mysql;
  2. 使用命令:show VARIABLES like ‘character%’;
    查看当前字符集,发现都是gbk等字符集,
  3. **这时使用如下命令改变字符集:
    mysql> SET character_set_client = utf8 ; 按回车键提示query ok
    mysql> SET character_set_connection = utf8 ; 按回车键提示query ok
    mysql> SET character_set_database = utf8 ; 按回车键提示query ok
    mysql> SET character_set_results = utf8 ; 按回车键提示query ok
    mysql> SET character_set_server = utf8 ; 按回车键提示query ok
    无论使用修改配置文件还是使用命令行修改字符集,修改完成后,需要重启mysql服务(cmd 中输入(1) net stop mysql (2)net start mysql (3)mysql -u root -p 输入密码 ),这时,再用命令show VARIABLES like ‘character%’; 查看当前字符集,已经生效。
  4. 由于,我们是已经建立了数据库,这时还需要在Navicat for mysql中,将数据库的字符集也改掉。
    右键数据库,选择编辑数据库,如图。

进入后,修改字符集为utf8
彻底解决mysql中文乱码的办法
之后,还需要对每个表点击右键,选择 涉及表 ;

5、然后在“选项”中,将表的字符集进行修改
彻底解决mysql中文乱码的办法
6、这时,如果以为工作做完了,那么就大错特错了,新插入一行数据,发现,中文还是会乱码,显示 ? ; 那么还差最后一步,因为是字符集有误的情况下已经建立了表了,所以,我们还需要将varchar类型 字段的的字符集也要改掉,进入设计表中,点中某字段,发现,数据类型果然还是Latin1,那么好,一个一个改过来即可。

当然,也可以使用命令的方式修改,命令如下:

ALTER TABLE 表名 CHANGE 列名 列名 VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;

例如,我们这个例子中就是:

ALTER TABLE role CHANGE name_cn name_cn VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;

如图,其中,红框中是根据自己实际情况需要修改的。
彻底解决mysql中文乱码的办法
这时候,我们再次进入表中,修改乱码的数据为中文,保存后,生效,不再乱码!