数据库无法插入中文字符

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

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

相关推荐
**AE86**15 分钟前
sed截取慢SQL大文件并导出指定时间范围内容
数据库·sql·sed
小清兔30 分钟前
c#基础知识
开发语言·数据库·学习·unity·c#·游戏引擎·.net
天上掉下来个程小白1 小时前
微服务-25.网关登录校验-网关传递用户到微服务
java·数据库·微服务
ta是个码农3 小时前
Mysql——日志
java·数据库·mysql·日志
hhzz3 小时前
SQL 窗口函数(Window Function)终极指南
数据库·sql
没有bug.的程序员6 小时前
MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术
java·数据库·sql·mybatis
Databend6 小时前
Databend 亮相 DTCC 2025:存算分离架构引领湖仓一体化
数据库
回家路上绕了弯6 小时前
ClickHouse 深度解析:从核心特性到实战应用,解锁 OLAP 领域新势能
数据库·后端
张铁铁是个小胖子7 小时前
mysql是怎样运行的(梳理)
数据库·mysql
许泽宇的技术分享8 小时前
当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
数据库·.net·text2sql·mcp