Code前端首页关于Code前端联系我们

mysql服务器乱码,如何修复mysql乱码问题

terry 2年前 (2023-09-30) 阅读数 42 #Mysql
文章标签 Mysql

本文内容列表:

  • 1、如何解决MySQL中汉字显示乱码的问题
  • 2.Mysql乱码问题
  • 3.Mysql中文乱码问题
  • 4.如何解决mysql中字符损坏的问题?

如何解决MySQL-中文显示乱码的问题

1。将My Files更改为安装文件根目录,搜索该字段的默认功能设置,将其值设置为中文字符编码或国际编码,然后重新启动MySQL服务器;

2。安装后更改数据库加密。在文件夹根部找到损坏数据库对应的文件夹,进入该文件夹,找到数据库加密配置文件,修改后重启MySQL服务器;

3。备份原有数据库数据,直接删除数据库并重启。创建数据库并设置加密,然后重新启动MySQL服务器。

4。如果仍然出现乱码,只需重新安装系统即可。

显示乱码的原因有很多:

这主要是MySQL数据库中**[编码不一致]**造成的

Latin1是ISO-8859-1的别名,称为写为Latin-1在某些环境下最终会更改为utf-8

在数据库中输入查询命令:

更改成功后查看界面:

Mysql不可读问题

1。转码失败

向表写入数据的过程中转码失败,数据库没有正确处理,导致表中存储的数据无法读取。

针对这种情况,前面的文章介绍了客户端向服务器发送请求。

如果任何一个编码不一致,都会导致表中的数据以错误的编码存储,产生不可读的字符。

例如以下简单语句:

set @a = "text string";

insert into t1 values(@a);

1。变量@a的字符编码由CHARACTER_SET_CLIENT参数决定,假设当前编码为A,即变量@a的编码。

2。写入语句在发送到MySQL服务器之前的编码由CHARACTER_SET_CONNECTION决定,假设此时编码为B。

3。经过MySQL一系列的词法和语法分析处理后,写入到表t1中。表 t1 的编码为 C。

如果编码 A、编码 B 和编码 C 不兼容,写入的数据将立即损坏。

2。客户端出现乱码

表格数据正常,但是客户端显示后出现乱码。

此类场景涉及从 MySQL 表中获取数据并将其发送回客户端。 MySQL本身的数据没有问题。客户端向MySQL发送请求,表代码为D。从MySQL中获取记录结果并发送给客户端。当前记录代码为 E (CHARACTER_SET_RESULTS)。

如果上面的代码E和D不兼容,检索到的数据就会出现乱码。但由于数据本身并未被破坏,因此更改为兼容的加密可以产生正确的结果。

该类别分为以下三个不同的子类别:

1)字段编码与表匹配,但客户端的编码不同

在下面的示例中,表数据的编码为utf8mb4, SESSION 1发起的连接代码是gbk。由于编码不兼容,所以检索出来的数据肯定是乱码。

2)表编码与客户端编码一致,但记录之间编码存在不一致

例如表编码是utf8mb4,应用编码也是utf8mb4,但是表中的数据有一半table可能是utf8mb4编码,另一半是gbk。那么此时表中的数据也是正常的,但是此时无论使用什么加密方式,都无法读取到整个数据。生成此类数据的原因有很多。例如,一种可能是表编码已更改多次,并且每次更改都是不完整的(不完整的更改在我的上一章中已介绍过)。例如表t3的编码以前是utf8mb4,现在是gbk,两种编码时都写入了正常数据。

3)各个字段的编码不一致,导致出现乱码。

与第二点相同的场景。不同的是:非记录之间的编码不统一,但是各个字段的编码不统一。表 c1 字段例如 a1,a2。 a1编码为gbk,a2编码为utf8mb4。当单独读取每个字段时,数据是完整的,但当所有字段一起读取时,数据总是部分不可读。

3。 LATIN1

数据以LATIN1加密存储时还有一种情况

我假设每个人都知道字符集 LATIN1。 LATIN1 处理一个字节流中的所有字符。当遇到无法处理的字节流时,保持原样即可。那么就可以保证上述两次存储和检索过程中数据的一致性。因此,MySQL长期默认的编码是LATIN1。这种情况看起来并没有什么问题,数据也不是不可读,那为什么要选择不同的编码呢?原因是字符存储的字节数不同。比如表情符号“❤”用utf8mb4存储,占用3个字节,varchar(12)可以存储12个字符,但如果换成LATIN1就只能存储12个字符。 4 个字符。

mysql中文乱码问题

1。转码失败

向表写入数据的过程中转码失败,数据库没有正确处理,导致表中存储的数据无法读取。

针对这种情况,前面的文章介绍了客户端向服务器发送请求。

如果任何一个编码不一致,都会导致表中的数据以错误的编码存储,产生不可读的字符。

例如下面的简单语句:

set @a = "text string";

insert into t1 values(@a);

变量@a的字符编码由CHARACTER_SET_CLIENT决定范围。假设当前编码为A,即变量@a的编码。

2。写入语句在发送到MySQL服务器之前的编码由CHARACTER_SET_CONNECTION决定,假设此时编码为B。

3。经过MySQL一系列的词法和语法分析处理后,写入到表t1中。表 t1 的编码为 C。

如果编码 A、编码 B 和编码 C 不兼容,写入的数据将立即损坏。

2。客户端出现乱码

表格数据正常,但是客户端显示后出现乱码。

此类场景是指从MySQL表中取出数据并发回客户端。 MySQL本身的数据没有问题。客户端向MySQL发送请求,表代码为D。从MySQL中获取记录结果并发送给客户端。当前记录代码为 E (CHARACTER_SET_RESULTS)。

如果上面的代码E和D不兼容,检索到的数据就会出现乱码。但由于数据本身并未被破坏,因此更改为兼容的加密可以产生正确的结果。

该类别分为以下三个不同的子类别:

1)字段编码与表格匹配,但客户端编码不同

例如,在下面的示例中,表数据编码为utf8mb4,连接编码由SESSION 1 gbk发起。由于编码不兼容,所以检索出来的数据肯定是乱码。

2)表编码与客户端编码一致,但记录之间编码存在不一致

例如表编码是utf8mb4,应用编码也是utf8mb4,但是表中的数据有一半table可能是utf8mb4编码,另一半是gbk。那么此时表中的数据也是正常的,但是此时无论使用什么加密方式,都无法读取到整个数据。生成此类数据的原因有很多。例如,一种可能是表编码已更改多次,并且每次更改都是不完整的(不完整的更改在我的上一章中已介绍过)。例如表t3的编码以前是utf8mb4,现在是gbk,两种编码时都写入了正常数据。

3)各个字段的编码不一致,导致出现乱码,场景与第二点相同。不同的是:非记录之间的编码不统一,但是各个字段的编码不统一。表 c1 字段例如 a1,a2。 a1编码为gbk,a2编码为utf8mb4。当单独读取每个字段时,数据是完整的,但当所有字段一起读取时,数据总是部分不可读。

3。 LATIN1

数据以LATIN1加密存储时还有一种情况

我假设每个人都知道字符集 LATIN1。 LATIN1 处理一个字节流中的所有字符。当遇到无法处理的字节流时,保持原样即可。那么就可以保证上述两次存储和检索过程中数据的一致性。因此,MySQL长期默认的编码是LATIN1。这种情况看起来并没有什么问题,数据也不是不可读,那为什么要选择不同的编码呢?原因是字符存储的字节数不同。比如表情符号“❤”用utf8mb4存储,占用3个字节,varchar(12)可以存储12个字符,但如果换成LATIN1就只能存储12个字符。 4 个字符。

如何解决MySQL无法读取的问题?

1。修改安装文件根目录下的 my.ini 文件: \x0d\x0a 搜索字段 default-character-set 并将其值设置为 utf8/gbk 之一(注意,在设置 utf8 时不能将其设置为 utf-8 ) \x0d\x0a重新启动MySQL服务器\x0d\x0a如果仍然出现乱码,请执行以下操作\x0d\x0a2。更改数据库编码\x0d\x0a 在安装文件夹的data文件夹中,找到与你乱码匹配的数据库。文件夹(这个文件夹就是你的数据库存放数据的地方),\x0d\x0a进入db.opt文件(也就是这个数据库的加密配置文件),将值修改为如下\x0d\x0adefault-character-set= gbk\ x0d\x0adefault-collat​​ion=gbk_chinese_ci\x0d\x0a重新启动MySQL服务器\x0d\x0a如果仍然出现乱码,请执行以下操作\x0d\x0a3。如果没有,请备份原数据库数据并立即删除数据库。 \x0d\x0a重新创建数据库并设置加密\x0d\x0创建数据库yourDB字符集gbk;\x0d\x0a不要忘记重新启动MySQL服务器。总而言之,如果事情还没有解决,我也无能为力。再次安装。重新安装时,请确保三个编码位置的编码一致

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门