MySQL 无法插入中文数据
本文最后更新于:2020年12月30日 凌晨
刚刚在 Linux Centos 装完 MySQL 后,想试一下是否能正常使用,但在插入中文数据时发生了下面的这个错误。
1 |
|
感觉是 MySQL 编码问题,查看一下编码格式
1 |
|
结果
Variable_name | Value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | latin1 |
character_set_filesystem | latin1 |
character_set_results | utf8 |
character_set_server | latin1 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
validate_password_special_char_count | 1 |
果然有几个编码是不支持中文的,所以将 latin1
编码修改为 utf8mb4
/utf8
就好啦
有关编码格式请参考:latin1, utf8,
utf8mb4
与utf8
区别可以参考 https://my.oschina.net/xsh1208/blog/1052781
修改它们
1 |
|
然后再次尝试插入中文数据,好像还是不行呀,怎么办呢?实际上上面修改的是数据库默认的编码格式,对于已经存在的表和列并未生效
查看一下数据表编码
1 |
|
Table | Crate Table |
---|---|
user | CREATE TABLE user ( id bigint(20) NOT NULL COMMENT '编号', name varchar(20) NOT NULL COMMENT '名字', sex tinyint(1) DEFAULT NULL COMMENT '性别', age int(11) DEFAULT NULL COMMENT '年龄' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户' |
查看全部列编码
1 |
|
Field | Type | Collation | Null | Key | Default | Extra Privileges | Comment |
---|---|---|---|---|---|---|---|
id | bigint(20) | null | NO | “” | “” | select,insert,update,references | 编号 |
name | varchar(20) | utf8_general_ci | NO | “” | “” | select,insert,update,references | 名字 |
sex | tinyint(1) | null | YES | “” | “” | select,insert,update,references | 性别 |
age | int(11) | null | YES | “” | “” | select,insert,update,references | 年龄 |
现在有两个选择
- 删除数据库重新建一个,数据库的编码格式就默认是 utf8mb4 了
- 手动修改数据库,数据表,字段的编码方式
- 删除重建数据库的话只需要将数据库导出 sql 脚本,然后重新执行即可(如果存在很多数据/数据库正在使用则此方法不适用)
- 手动修改编码
- 修改数据库编码
1
alter database <db_name> character set utf8mb4;
- 修改数据表编码
1
alter table <table_name> character set utf8mb4;
- 修改字段编码
1
ALTER TABLE <table_name> MODIFY COLUMN <field_name> <field_type> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 修改数据库编码
那么,关于 MySQL 不能插入中文数据的问题就到这里啦
MySQL 无法插入中文数据
https://blog.rxliuli.com/p/b0c1f108a8bf450e8fd05615a2e8b8e2/