MySQL 中文乱码问题

引言

在 MySQL 8 之前的版本中,MySQL 的默认字符集一直是 latin1,这种默认的字符集编码方式是不支持中文的,可以说这对于使用汉语的中国程序员来说很不友好。虽然可以通过修改字符集编码方式为 utf-8 来支持中文,但是需要在很多地方修改字符集编码是一件让人心烦的事情,一旦忘记修改就会出现讨厌的中文乱码问题。

好消息是 MySQL 8 终于将该死的默认的字符集编码方式 latin1 设置为 utf-8,这算是对中国程序员做了一件好事。

查看 MySQL 字符串编码方式

  • 打开 CMD 窗口,输入 mysql 登录命令启动 mysql 客户端
mysql -uroot -p123456
  • 查看字符集编码
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set, 1 warning (0.01 sec)


mysql> show variables like 'character_set%';
+--------------------------+-----------------------------------------------------+
| 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       | E:\Program Files (x86)\mysql-8.0.22\share\charsets\ |
+--------------------------+-----------------------------------------------------+
8 rows in set, 1 warning (0.11 sec)

缺省是 latin1 编码,会导致中文乱码。

修改字符集编码

  • 修改数据库的编码
mysql> alter database 数据库名 character set utf8;
  • 修改数据库表的编码
mysql> ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

修改配置文件字符集编码

打开 MySQL 的 my.ini 配置文件,修改如下:

[mysql]  
default-character-set=utf8  
[client]  
default-character-set=utf8  
[mysqld]  
default-character-set=utf8  
character_set_server=utf8  
init_connect='SET NAMES utf8' 

重启 MySQL,这样可以确保 MySQL 缺省字符集编码方式是 utf8

posted @ 2020-12-03 17:15  Binge-和时间做朋友  阅读(181)  评论(0编辑  收藏  举报