MySQL 内部设置的编码与表中定义的编码问题

有时候,我们向表中插入中文数据的字符串,可是却不能向表中插入该中文数据的字符串,其实是编码解码问题。MySQL 内部设置的编码与定义表的时候的编码不同,导致编码异常,要么就是不能够将数据插入到数据表中,要么就是数据已经插入到了编码表中了,可是却会出现乱码的情况。下面,是我个人的解决方案,能够实现插入中文数据:

查看 MySQL 内部设置的编码

首先就是要查看 MySQL 内部设置的编码。查看包含character开头的全局变量

复制
SHOW VARIABLES LIKE 'character%';

执行结果:
img

解决方案

修改MySQL内部设置的编码

修改 client、connection、results、database、server的编码为 GBK 或 UTF8

  1. 修改客户端的编码为 UTF8

    复制
    SET character_set_client = utf8;
  2. 修改连接的编码为 UTF8

    复制
    SET character_set_connection = utf8;
  3. 修改查询的结果编码为 UTF8

    复制
    SET character_set_results = utf8;
  4. 修改数据库编码为 UTF8

    复制
    SET character_set_database = utf8;
  5. 修改数据库服务器的编码为 UTF8

    复制
    SET character_set_server = utf8;

再次查看MySQL内部编码,查看是否修改成功

复制
SHOW VARIABLES LIKE 'character%';

修改表中设置的编码

查看创建表的SQL语句

复制
SHOW CREATE TABLE 表名;

如students表:

复制
SHOW CREATE TABLE students;

该表是我为了测试已经创建好的,结果如下:

复制
CREATE TABLE `students` (
`Id` int(30) NOT NULL,
`Name` varchar(10) DEFAULT NULL,
`Age` int(4) DEFAULT NULL,
`Gender` varchar(25) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

可以看到CHARSET=latin1,即students表的编码格式为latin1。

修改表中的编码格式

复制
ALTER TABLE 表名 CONVERT TO CHARACTER SET 新编码格式 COLLATE 排序规则;

如上面查看的students表:

复制
ALTER TABLE students CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

将students表的编码格式修改为utf8,MySQL中的排序规则为utf8_general_ci

修改成功后,再次查看student表的SQL:

复制
CREATE TABLE `students` (
`Id` int(30) NOT NULL,
`Name` varchar(10) DEFAULT NULL,
`Age` int(4) DEFAULT NULL,
`Gender` varchar(25) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

发现已经修改成功了。这个时候就可以向students表中添加中文数据了。

posted @   LeeHua  阅读(413)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航