MySQL 终端乱码/字符集插入错误 -解决指南
解决的问题
- 数据库查询乱码
比如:
mysql> select *from teacher;
+-----------+--------+--------------------------+--------------------------+-----------------+
| teacherno | tname | major | prof | department |
+-----------+--------+--------------------------+--------------------------+-----------------+
| 1 | 鏉庡崕 | 杞欢宸ョ▼ | 缃戠粶鎶€鏈? | 璁$畻鏈哄闄? |
| 10 | 鍛ㄨ棌 | 杞欢宸ョ▼ | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 2 | 鐜嬩笁 | 缃戠粶瀹夊叏 | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 3 | 鐜嬫捣 | 鐗╄仈缃? | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 4 | 璧甸湠 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 5 | 鑾插績 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 6 | 鏂囨 | 杞欢宸ョ▼ | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
| 7 | 閮戝浗 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 8 | 鍒囧厠 | 杞欢宸ョ▼ | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
| 9 | 鐜嬫檽 | 鐗╄仈缃? | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
+-----------+--------+--------------------------+--------------------------+-----------------+
10 rows in set (0.00 sec)
- 插入中文时显示编码错误
比如:
mysql> insert into teacher values
-> (11,'dfsd','东方','计算','吉森');
ERROR 1366 (HY000): Incorrect string value: '\xB6\xAB\xB7\xBD' for column 'major' at row 1
解决方法概述
- 先将所有的编码都改为uutf8
-
- 所有信息:数据库编码,每个表格的编码,表格的每个属性的编码方式
好像只要数据库的编码全是utf8就可以,欢迎反馈
- 所有信息:数据库编码,每个表格的编码,表格的每个属性的编码方式
- 将character_set_client 和character_set_results修改为gbk
完成,下面每个步骤具体说明
将所有的编码都改为uutf8
通过网络查找吧。
好像只要数据库的编码全是utf8就可以,欢迎反馈
查看数据库编码方法
show variables like 'char%';
解决命令窗口问题
上述设置后,在应用程序(Navicat Premium等)中应该可以正常的显示数据
但是在命令窗口不能正常显示。
暂时解决-重启mysql失效
查看数据库编码
show variables like 'char%';
查看数据库编码
show variables like 'char%';
应该会展示如下:
(除了最后一行地址不一样)
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 6.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
配置说明:
character_set_client 客户端字符集
character_set_connection 客户端与服务器端连接采用的字符集
character_set_results SELECT查询返回数据的字符集
character_set_database 数据库采用的字符集
修改如下编码集
set character_set_client=gbk;
set character_set_results=gbk;
修改完后再次查看数据库编码
show variables like 'char%';
应该会显示这样
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 6.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
这样即可正常在命令窗口正常使用mysql数据库。
永久设置
(未测试,理论上ok)
上面方法是设置全局的数据库字符编码,即设置整个MySQL服务的,当重启MySQL服务的时候,编码依然会变为原来的字符编码。
如果想永久设置字符编码,需要在配置文件中修改数据库的字符编码
编辑 /etc/my.cnf,
在里面加入下列代码即可,
- 已经有[ XXX ]的,在里面直接加入即可。
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
重启数据库
重启数据库即可看到效果
service mysql restart