当前位置: 首页 > news >正文

数据库无法插入中文字符

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_clientutf8mb4
character_set_connectionutf8mb4
character_set_databaselatin1
character_set_filesystembinary
character_set_resultsutf8mb4
character_set_serverlatin1
character_set_systemutf8
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.csdn.net/weixin_43770545/article/details/90482372
由此链接得知,可能是数据库默认的字符集的问题

http://www.dtcms.com/a/122398.html

相关文章:

  • Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例
  • 12.实现一个简单的依赖注入容器
  • [免费]SpringBoot+Vue高考志愿填报系统【论文+源码+SQL脚本】
  • MySQL | 三大日志文件
  • KHARPA币:结合传统与区块链技术的DeFi DAO革命
  • Houdini20.5apex绑定模块入门学习笔记
  • 参考平面跨分割情况下的信号回流
  • 落地DevOps文化:运维变革的正确打开方式
  • C#里设计Modbus-RTU(Remote Terminal Unit)协议
  • STM32——RTC实时时钟
  • Windows 部署项目 apache + mod_wsgi,nginx + waitress
  • 栈与堆的本质区别:深入理解 Rust 的内存管理模型
  • Xilinx虚拟输入/输出(VIO)IP核详细介绍及使用示例
  • Smith-Waterman 算法(C++实现)
  • SpringBoot 接口限流Lua脚本接合Redis 服务熔断 自定义注解 接口保护
  • postman 安装及使用 [软件测试工具]
  • 如何根据不同文字内容批量生产手写的图片,模拟真人写的笔记(待验证)
  • 代码随想录算法训练营Day24
  • 第1章 对大型语言模型的介绍
  • SQL优化技术分享:从 321 秒到 0.2 秒的性能飞跃 —— 基于 PawSQL 的 TPCH 查询优化实战
  • 栈与队列及其基础应用
  • 【Kafka基础】topic命令行工具kafka-topics.sh:基础操作命令解析
  • STM32低功耗
  • 数据结构--堆
  • 软件测试之功能测试详解
  • C++语法学习之路
  • Mac监控新风尚:酷炫界面,性能监控更直观!
  • 数字图像处理作业4
  • SQLite 中日期型数据定义及处理(Delphi 版本)
  • IDEA :物联网ThingsBoard-gateway配置,运行Python版本,连接thingsboard,接入 MQTT 设备