数据库无法插入中文字符

INSERT INTO book VALUES (1, '楚辞', '屈原', '中国文联出版社', '0')

1366 - Incorrect string value: '\xE6\xA5\x9A\xE8\xBE\x9E' for column 'name' at row 1

查询时间: 0 秒

查看字符集设置

bash 复制代码
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包安装的,只有存在这个文件

bash 复制代码
/etc/mysql/my.cnf
bash 复制代码
sudo vim /etc/mysql/my.cnf

插入以下内容(往下看,先别直接插入)

bash 复制代码
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

发现/etc/mysql/my.cnf存在一行配置命令

bash 复制代码
!includedir /etc/mysql/conf.d/

通过搜索得知,该行命令引入了/etc/mysql/conf.d/目录下的配置文件,所以我们也就不直接在/etc/mysql/my.cnf下修改了,我们去该目录下(/etc/mysql/conf.d/)进行修改。

查看该目录下存在的文件

bash 复制代码
❯ cd /etc/mysql/conf.d
❯ ls
mysql.cnf  mysqldump.cnf

显然需要修改mysql.cnf

bash 复制代码
sudo vim mysql.cnf

然后把第一行空白的[mysql],dd删掉,插入上方的配置文件。保存退出。

重启服务使配置生效

bash 复制代码
sudo systemctl restart mysql

然后删除原来创建数据库

就可以正常插入中文数据了。

bash 复制代码
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 秒

可以在重新创建的数据库中执行查询(原有数据库中的字符集是不会改变的,需要删除重新创建)

bash 复制代码
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.csdn.net/weixin_43770545/article/details/90482372

由此链接得知,可能是数据库默认的字符集的问题

相关推荐
workflower5 小时前
软件工程-练习
数据库·需求分析·个人开发·极限编程·结对编程
扶尔魔ocy5 小时前
【QT自定义2D控件】QGraphics绘制仪表盘
数据库·qt·microsoft
yookay zhang5 小时前
达梦数据库监听进程
网络·数据库·oracle
Archy_Wang_15 小时前
centos7的mysql做定时任务备份所有数据库
数据库·mysql
Java 码农6 小时前
MySQL基础操作案例设计
数据库·mysql
友友马6 小时前
『 QT 』按钮类控件属性解析
开发语言·数据库·qt
vvw&6 小时前
如何在 Ubuntu 上安装 PostgreSQL
linux·运维·服务器·数据库·ubuntu·postgresql
qq_5470261797 小时前
Canal实时同步MySQL数据到Elasticsearch
数据库·mysql·elasticsearch
java1234_小锋8 小时前
REDIS集群会有写操作丢失吗?为什么
数据库·redis·缓存
兰若姐姐8 小时前
如何进行MSSQL提权?sp_oacreate、sp_oamethod和沙盒提权以及xp_regwrighte提权
数据库·sqlserver