mysql更改为utf8

AffettoIris 2023-1-15 2,657 1/15

更改Mysql默认编码集为Utf8

用了许久的mysql5.7,发现插入中文数据,报错“SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE5\xA4\xA7\xE9\xBB\x84' for column 'name' at row 1”。原来是mysql5.7默认的字符集是欧美

latin1字符集,不支持中文,需要把字符集更改为 UTF-8。原文链接如下:

【MySQL】MySQL无法插入中文、不持支中文、输入中文报错的解决方法

步骤1:查看编码命令

show variables like 'character_%';
1

此命令是查看数据库中包含 ‘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)
1234567891011121314

可以看到第3行与第6行的 database 和 server 都是 latin1 字符集,因此都不支持中文。

show variables like 'collation_%';
1

此命令是查看数据库中包含 ‘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)
123456789

可以看到第2和第3行,database 和 server 的比较规则都是基于 latin1 字符集的比较规则。都是不支持中文的。

步骤2:修改MySQL的数据目录下的my.ini配置文件

根据你的电脑的MySQL安装路径找到 my.ini 配置文件,这里我的安装路径是 E:\ProgramData\MySQL\MySQL Server 5.7。用 EditPlus 打开。

mysql更改为utf8

[mysql] #大概在第63行左右,在其下添加
...
default-character-set=utf8  #默认字符集

[mysqld] #大概在第76行左右,在其下添加
...
character-set-server=utf8
collation-server=utf8_general_ci
12345678

保存后即可关闭该文件。

步骤3:重启服务

去计算机管理–>服务中重新启动 MySQL57: (重启服务,不等于重启mysql5.7软件)

mysql更改为utf8

步骤4:察看编码命令

重启好后,在Windows命令行中重新登录 MySQL57。

mysql -uroot -P13306 -p
Enter password: *********
12

再次输入这两个命令:

show variables like 'character_%';
show variables like 'collation_%';
12

输出:

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)
1234567891011121314
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)
123456789

可以看到,两个输出结果中,database 和 server 的变量中默认字符集都变成了 UTF-8。至此,MySQL 5.7 不支持中文的问题就顺利解决了。

在非Utf8时建的表的补救之法

上述方法不能挽救已存在的表的字符集,不过往后新建表字符集是utf8.

原文链接

show create table department;

用此命令确认之前建的表的字符集还是latin1

mysql更改为utf8

因此,还需要修改表格的编码方式。

修改表格的默认编码方式,并插入数据试一下

alter table tablename character set utf8;

但是插入中文数据还是不行。看下图,仔细一看,原来列的的字符集还是latin1,所以我们应该对字段进行编码方式修改

mysql更改为utf8

alter table tablename modify columnname varchar(20) character set utf8;
这儿约束需要根据自己原来的约束情况加,比如原来是not null ,你用上面的代码会变成允许null。
但是这样太累了,10个表100个字段,执行100次,如果可以,删库重建吧。
- THE END -

AffettoIris

10月16日15:53

最后修改:2023年10月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论