数据库无法插入中文字符

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

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

相关推荐
数字新视界15 分钟前
空调控制器AIRC800的智能化管理与应用实践
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
学IT的周星星1 小时前
LangGraph:用「流程图」的方式编排 Agent
数据库·人工智能·大模型·llm·流程图·agent
吃一碗粉只付一碗钱1 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
蹄蹄1 小时前
从“一次性检测“到“年度服务“:检测机构收入结构变了,合同和应收账款也要跟着变
大数据·数据库·人工智能
福大大架构师每日一题2 小时前
redis 8.10.3正式发布:聚焦集群总线超大消息传播场景的安全修复,8.10.3 Latest更新解读
数据库·redis·安全
TDengine (老段)2 小时前
TDengine IDMP 十大实用功能(3)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
sun03222 小时前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
YH_Analytics2 小时前
2026 高压 E-House 市场深度分析报告市场格局
网络·数据库
后台模板学习3 小时前
MongoDB 与 MySQL 在 IM 即时聊天场景中该
数据库·mysql·mongodb