INSERT INTO book VALUES (1, ‘楚辞’, ‘屈原’, ‘中国文联出版社’, ‘0’)
1366 - Incorrect string value: ‘\xE6\xA5\x9A\xE8\xBE\x9E’ for column ‘name’ at row 1
查询时间: 0 秒
查看字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
显示如下
配置项 | 值 |
---|---|
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | latin1 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | latin1 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
character_set_database 和 character_set_server 为 latin1:这两个参数分别代表数据库默认字符集与服务器默认字符集。latin1 字符集无法支持中文字符,要是用这个字符集来存储中文数据,就会出现乱码的情况。
插入中文字符数据时可能出现的问题
当你尝试插入中文字符数据时,由于服务器和数据库默认字符集是 latin1,中文字符无法正确存储,最终会以乱码形式呈现。
修改全局字符集设置
你可以修改 MySQL 配置文件(通常是 /etc/mysql/my.cnf 或者 /etc/my.cnf),把服务器和数据库的默认字符集改成 utf8mb4。
我这边是通过deb包安装的,只有存在这个文件
/etc/mysql/my.cnf
sudo vim /etc/mysql/my.cnf
插入以下内容(往下看,先别直接插入)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
发现/etc/mysql/my.cnf
存在一行配置命令
!includedir /etc/mysql/conf.d/
通过搜索得知,该行命令引入了/etc/mysql/conf.d/
目录下的配置文件,所以我们也就不直接在/etc/mysql/my.cnf
下修改了,我们去该目录下(/etc/mysql/conf.d/
)进行修改。
查看该目录下存在的文件
❯ cd /etc/mysql/conf.d
❯ ls
mysql.cnf mysqldump.cnf
显然需要修改mysql.cnf
sudo vim mysql.cnf
然后把第一行空白的[mysql],dd删掉,插入上方的配置文件。保存退出。
重启服务使配置生效
sudo systemctl restart mysql
然后删除原来创建数据库
就可以正常插入中文数据了。
CREATE DATABASE springbootdata
> OK
> 查询时间: 0 秒
USE springbootdata
> OK
> 查询时间: 0 秒
CREATE TABLE book (
id int(0) NOT NULL AUTO_INCREMENT,
name varchar(32) ,
author varchar(32),
press varchar(32),
status varchar(1) ,
PRIMARY KEY (id) USING BTREE
)
> OK
> 查询时间: 0.06 秒
INSERT INTO book VALUES (1, '楚辞', '屈原', '中国文联出版社', '0')
> Affected rows: 1
> 查询时间: 0.007 秒
INSERT INTO book VALUES (2, '纳兰词', '纳兰性德', '中国文联出版社', '1')
> Affected rows: 1
> 查询时间: 0.006 秒
INSERT INTO book VALUES (3, '西游记', '吴承恩', '中国文联出版社', '2')
> Affected rows: 1
> 查询时间: 0.012 秒
可以在重新创建的数据库中执行查询(原有数据库中的字符集是不会改变的,需要删除重新创建)
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
发现已经更改为utf8了。
参考
https://blog.youkuaiyun.com/weixin_43770545/article/details/90482372
由此链接得知,可能是数据库默认的字符集的问题