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
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16209578.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步