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

mysql数据库中文混合字符,如何解决mysql数据库中文混合字符

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

本文内容列表:

  • 1、mysql数据库表中的中文疯狂字符应该选择什么编码?
  • 2、如何解决MySQL中显示汉字乱码的问题
  • 3. MySQL显示中文疯狂字符?
  • 4、mysql中文显示乱码问题如何解决
  • 5、mysql数据库中存储的数据是中文的。为什么会检测到疯狂角色?
  • 6、mysql数据库中文乱码如何解决

mysql数据库表中的中文降级字符应该选择哪种编码?

数据库中有多种类型的字符集。我个人建议数据库字符集尽量使用utf8(utf-8),这样你的数据可以顺利迁移,因为utf8字符集是目前最适合实现的。字符集用于几种不同字符集之间的转换。即使你在命令行工具中无法正确看到数据库中的内容,我仍然强烈建议使用utf8作为默认字符集。如果要使用gb2312编码,建议使用latin1作为数据表的默认字符集,这样可以直接在命令行工具中输入中文数据并直接显示。不使用像gb2312或gbk这样的字符集,如果担心查询排序等问题,可以使用二进制属性 对编程有影响的约束主要是客户端字符集和数据库字符集(还有服务器)字符设置了,不知道有什么用)。数据库中常用的操作有存储数据和读取数据。在这个过程中,混沌的非乱码看起来与数据库字符集无关。我们只需要保证写入时选择的字符集和读取时选择的字符集一致,即只需要保证两次操作的客户端字符集一致即可。 \x0d\x0a在MySQL客户端执行查询的过程一般是在客户端查询上输入一条SQL语句,回车,然后终端显示查询结果。在这个过程中,只有终端和三个MySQL系统变量指定了正确的字符集,才能保证我们向服务器发送正确的SQL语句,然后服务器返回正确的结果并在终端上正确显示。 \x0d\x0a这三个MySQL系统变量是:\x0d\x0a1。 character_set_client,终端字符集,告诉服务器客户端\x0d\x0a2提交的SQL语句的编码格式。 character_set_connection,连接字符集,是服务器翻译的SQL语言句子\x0d\x0a3中使用的编码格式。 character_set_results,返回结果集的字符集,是服务器在返回结果集之前对结果集进行转换的编码格式\x0d\x0a,在MySQL终端中,运行命令,show 'char%'等变量可以控制这些变量的值。这三个变量通常设置为相同的字符。您可以使用命令 setname [charset name] 更改这三个变量的值。一般来说,只要输入能够代表你的数据的字符集,你的查询结果就可以在终端中正确显示。 \x0d\x0a例如表t1使用utf8编码,表中的字段c1继承了这种编码。创建表如下\x0d\x0amysql create table t1 (c1 text not null) charset utf8; \x0d\x0a 使用的字符为汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83 \x0d\x0a使用以下SQL语句将数据插入到t1值中('范'); \x0d\x0aa) 如果终端设置为utf8,并且执行设置的utf8的名字,那么插入数据库的就是“粉丝”这个词的utf8编码。 MySQL在此过程中不需要进行任何编码转换。写入数据库的内容可以通过执行 select hex(c1) from t1 来验证数据的十六进制编码。 \x0d\x0a\x0d\x0ab) 如果终端设置为utf8,执行名称为gbk,那么执行完这个插入操作后,二进制数据写入的是E9 91 BC,也就是“中文”的utf8编码字符“gong”。这是因为终端的“fan”输入使用的是utf8编码,而服务器认为终端发送的内容是gbk编码,所以如果插入到t1表中,就会从gbk转换为utf8 .当然是错误的。\x0d\x0a\x0d\x0ac)如果终端设置为gbk,并且设置了名称gbk,那么插入操作完成后,“范”字的utf8编码仍然写入到t1中插入过程中,终端输入的是“范”的gbk编码B7 B6,则告知服务器终端发送的SQL语句是gbk编码(由character_set_client指定),所以插入时在数据之前进行了从gbk到utf8的编码转换。 \x0d\x0a\x0d\x0ad) 如果终端设置为gbk,执行names设置为utf8,则插入操作完成后,MySQL会报数据被截断的警告。事实上,终端输入的是“扇子”这个字符的gbk编码B7 B6,服务器被告知客户端发送的SQL语句是utf8编码的,所以执行时没有进行转码,直到数据被转码。插入。 B7 B6不符合utf8的编码规则,会出现警告信息。实际输入的数据是3F 3F,是两个问号。 \x0d\x0a\x0d\x0a询问时也适用同样的原则。 MySQL还会根据setname设置的字符集对返回给客户端的结果集进行适当的编码转换。如果转换后的结果与终端显示的字符集一致。如果一致,则正确显示;如果他们不一致,他们就会发疯。 \x0d\x0a\x0d\x0a的结论是,只要终端的字符集与setname指定的字符集一致,MySQL在处理时就可以进行正确的转码,并正确显示。 \x0d\x0a\x0d\x0a 另外,通过程序操作MySQL数据库时,还必须事先运行setname命令指定程序要输出的字符集。例如,如果您使用程序将数据从一个utf8编码的数据库迁移到另一个gbk编码的数据库,则必须在选择源数据之前执行setname gbk才能获取gbk编码的数据。

如何解决MySQL中文显示字符问题

1。编辑安装文件根目录下的My files,查找默认功能设置字段,将其值设置为中文字符编码或国际编码之一,然后重新启动MySQL服务器; 2. 更改数据库编码并将其放置在安装目录的根目录下。在目录中找到损坏数据库对应的文件夹,进入该文件夹,找到数据库的编码配置文件,更改后重启MySQL服务器;

3。备份原数据库数据,立即删除数据库,重新创建数据库并设置编码,重启MySQL服务器。

4。如果仍然出现疯狂字符,只需安装系统即可。

显示乱码的原因有很多:

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

Latin1是ISO-8859-1的别名​​​​,并且在某些环境下写成Latin-1,最终变成utf-8

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

更改成功后看到的界面:

MySQL显示中文混合字符?

您可以检查一下您的选项设置中的汉字编码部分是否有错误。

如何解决中文mysql乱码问题

Linux下Mysql输入中文并显示混合字符的解决方案

mysql -uroot -p 输入并输入密码

进入mysql查看状态如下:

默认是客户端和服务器端他们全部使用 latin1,因此缺少字符。

解决办法:

mysqluser mydb;

mysqlalter数据库mydb字符集utf8;!

还有一个方法就是彻底解决默认的Mysql配置文件

l故障如何设置中文和中文繁体字

上面用了一个临时的方法来改变数据库的字符集设置显示中文,但是后来发现在某些系统上并不成功,比如debian7.0我用过,找了好久才发现,终于找到了适合debian系统的解决方案。在debian

7.0下测试成功。其他方法,比如改变客户端和mysql添加default-character-set=utf8等,只适用于5.5之前的系统!

终极解决方案,一劳永逸:

将字符串从debian下的mysql改为utf8(参考:rainysia的专栏)

1。进入mysql(mysql -uroot -p),查看当前数据库字符集(状态;)

2。检查当前系统版本(lsb_release -a)

Mysql无法插入中文

3. #vim /etc/mysql/my.cnf。 (5.5之前的系统)[client]下添加default-character-set=utf8

,[mysqld]下添加default-character-set=utf8

。注意:注意如果更改后报错无法启动,尝试将默认的-character-set=utf8修改为character_set_server=utf8。只需在mysqld下添加.client即可,无需

4。 #vim /etc/mysql/my.cnf。 (系统根据5.5)更改如下:

[客户]

default-character-set=utf8

[mysqld]

default-storage-engine=INNODB

character-set-server=utf8

collat​​ion-server=utf8_general_cil/重新启动我的q5。 etc/init.d/mysql 停止 /etc/init.d/mysql 启动)

6。成功完成,进入mysql查看字符集(mysqlshow变量如'character_set_%';)

Mysql无法插入中文

1.创建数据库和表格时避免中文移位字符并查看编码方法

1。创建数据库时: CREATE DATABASE `test`

CHARACTER SET 'utf8'

COLLATE 'utf8_general_ci';

2 ,创建表时 CREATE TABLE `database_user` ('char) ) 。问题,即建库和建表时使用相同的编码格式。

但是如果你已经建好了数据库和表,可以通过下面的方式查询。

1。看一下默认的编码格式:

mysql显示变量如“%char%”;

+---------------------------- --- -------- ---------------+

|变量名 |值 |

+----------------- ----------+----------+

|字符集客户端 |国语 |

|字符集连接 |国语 |

|字符集数据库 | UF8 |

|字符集文件系统 |二进制 |

|字符集结果 |国语 |

|字符集服务器 | utf8 |

|字符集系统 | utf8 |

+-------------------------------- -+-----+

注意:要确定前面2个,可以使用setnamesutf8、setnamesgbk来设置默认编码格式;

执行 SET NAMES f8 效果相当于同时设置:

SET character_set_client='utf8';

SET character_set_connection='utf8';

SET character_set;

2。查看test数据库的编码格式:

mysql show create database test;

+-----------+-------- -------- -------------------------------------------------------- ------ -----------------+

|数据库|创建数据库|

+-------------+- ---------------------------- - ------------------------------------------------- ------ ----------------- -------------------+

|测试|创建数据库 `test` /*!40100 默认字符集 gbk */ |

+------------+-------------- -- - -------------------------------------------------- ------- --------------------------------+

3。查看yjdb数据库的编码格式:

mysql show create table yjdb;

| ETC创建表 `yjdb` (

`sn` int(5) NOT NULL AUTO_INCRMENT,

`type` varchar(10) NOT NULL,

`brc` varchar(6) NOT NULL,

`teller` int(6) NOT NULL,

`电话名称` varchar(10) NOT NULL,

`date` int(10) NOT NULL,

`count` int(6) NOT NULL,

`back` int(10) NOT NULL,

主键 (`sn`),

唯一键`sn` (`sn`),

唯一键`sn_2` (`sn`)

) ENGINE=MyISAM AUTO=18_INCRMENT默认字符集=gbk ROW_FORMAT=动态 |

2。避免导入数据出现中文乱码问题

1:保存数据编码格式为utf-8

设置默认编码为utf8:

设置names utf8;

设置数据库utf_name defaults:

ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

将表 tb_name 默认编码设置为 utf8:

ALTER TABLE `tb_name_`ALTER TABLE `tb_name_` DEFAULT CHAR 导入:

加载数据LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb;

2:保存数据编码格式为ansi(即GBK或GB2312)

设置默认Encoded为gbk:setgbk;

设置数据库db_name默认编码为gbk:

ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

表tb_name设置默认编码:gbk_chinese_ciALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

导入:

LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb;注意 1 gb gbk 导入不是 UTF8;

2。 Dos不支持UTF8的显示;

3.解决网站疯狂字符问题

将网站编码设置为utf-8,兼容世界上所有字符。

如果网站运行时间较长,旧数据较多,简体中文设置无法再更改,建议将页面编码设置为GBK。 GBK和GB2312的区别在于,GBK比GB2312能显示更多的数据,要显示简码中的字符,只能使用GBK。

1。编辑/etc/my.cnf ,在[mysql]部分添加default_character_set=utf8;

2.编写连接URL时,添加参数?useUnicode=truecharacterEncoding=utf-8;

3。在网站代码中添加“Set Names utf8”或“Set Names gbk”命令,告诉MySQL所有连接内容必须使用

utf8或gbk;

mysql数据库中存储的是中文,为什么检测到缩写字符?

1、转码错误

向表写入数据的过程中转码失败,数据库没有进行适当的处​​理,导致表中存储的数据出现乱码。

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

如果其中一个编码不一致,那么就会以错误的编码存储表中的数据,并产生减少的字符。

例如下面的简单语句:

set @a = "Textstring";

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,但是其中一半的数据表的编码可以是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 文件:

查找 default-character-set 字段,将其值设置为 utf8/gbk 之一(注意,如果你安装的话不能设置为 utf-8) put utf8)

重新启动MySQL服务器

如果仍然出现无效字符,则执行以下操作

2.更改数据库编码

在安装目录的data目录下找到你的数据库对应的混合字符文件夹(这个文件夹就是你的数据库存放数据的地方),

找到db.opt文件(即,该数据库的编码配置文件),并将值更改为以下

default-character-set=gbk

default-collat​​ion=gbk_chinese_ci

始终重新启动MySQL服务器,然后进行以下操作

3。如果还不行,请备份原数据库数据,立即drop数据库,启动服务器。总而言之:如果还没有解决,我就迷路了。再次安装。重新安装时,将三个地方的编码保持一致

版权声明

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

热门