在MySQL5.7中的表添加数据时,如果添加字符串数据是中文时,会报错。而在MySQL8.0中添加中文数据则不会报错。
原因是MySQL 5.7默认字符集是 latin,是欧洲用的字符集,不支持中文。而MySQL 8.0默认字符集是 UTF-8,支持中文。
此时,在使用MySQL 5.7之前,需要把字符集更改为 UTF-8。具体操作如下:
步骤1:查看编码命令
show variables like 'character_%';
此命令是查看数据库中包含 ‘character_’ 开头的变量或属性。
例子:
mysql> show variables like 'character_%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | E:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.02 sec)
可以看到第3行与第6行的 database 和 server 都是 latin1 字符集,因此都不支持中文。
show variables like 'collation_%';
此命令是查看数据库中包含 ‘collation_’ 开头的变量或属性。是用于字符串的比较规则。
例子:
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.00 sec)
可以看到第2和第3行,database 和 server 的比较规则都是基于 latin1 字符集的比较规则。都是不支持中文的。
步骤2:修改MySQL的数据目录下的my.ini配置文件
根据你的电脑的MySQL安装路径找到 my.ini
配置文件,这里我的安装路径是 E:\ProgramData\MySQL\MySQL Server 5.7。用 EditPlus 打开。
[mysql] #大概在第63行左右,在其下添加
...
default-character-set=utf8 #默认字符集
[mysqld] #大概在第76行左右,在其下添加
...
character-set-server=utf8
collation-server=utf8_general_ci
保存后即可关闭该文件。
步骤3:重启服务
去计算机管理–>服务中重新启动 MySQL57:
步骤4:察看编码命令
重启好后,在Windows命令行中重新登录 MySQL57。
mysql -uroot -P13306 -p
Enter password: *********
再次输入这两个命令:
show variables like 'character_%';
show variables like 'collation_%';
输出:
mysql> show variables like 'character_%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | E:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set, 1 warning (0.00 sec)
可以看到,两个输出结果中,database 和 server 的变量中默认字符集都变成了 UTF-8。至此,MySQL 5.7 不支持中文的问题就顺利解决了。