MYSQL数据库中文乱码问题,导入的数据中文显示乱码,在保持数据不变的情况下,怎么转化为正常的中文

MYSQL数据库中文乱码问题,导入的数据中文显示乱码,在保持数据不变的情况下,怎么转化为正常的中文,第1张

编码不一致,你可以使用此命令查看编码方式,首先use一下数据库,show variables like '%char%';查看是不是gbk或gb2312等支持中文的,set names gbk就解决了,唉手指头都麻了。

楼主,这个问题一般是由于数据库需要的编码格式导致的,你先确认你的数据库是采用什么编码的,然后在入库之前进行相应的转换即可,这个问题我遇到多次,我相信我们遇到的是同一个问题。

我举一个,你参考一下。

例如我从UTF-8编码的文件中获取到一个str,想要存到windows的txt里面,那我在存入之前,应该进行如下的转换:

msg_gbk=msgdecode('UTF-8')encode('GBK')

这个时候把msg_gbk存进txt里面,就不会产生乱码了。

提供一种思路,希望能帮到你。

这个问题在做编程的时候经常会遇到。首先你要明白一点每一个MySql都有一个默认的编码格式。然后每一张表也有,你可以借助数据库管理工具修改,非常简单。我本人用的就是Navicat。造成你这种情况的原因主要是编码的格式没有同意,最好改成全部编码格式都是gbk格式,建议不要用utf-8或者itian。

mysql数据库 为了保证 不出现乱码包注意4项一直

1 创建一致 使用UTF8

CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2 链接编码一致

$mysqli->query("SET NAMES 'UTF8'");

3 html php 页面声明 编码一致

header("Content-Type: text/html; charset=utf-8");

4 脚本文件 编码一致

存储脚本文件时选择unicode UTF8

特别提示, windows 使用中文文件名和目录名 , 默认的是GBK 要写入非 gbk数据库需要转为一致的代码

建议题主好好debug调试一下

1,前台页面提交数据到后台接收,这个期间是否已经变成乱码。如果是,那就需要在前台进行编码转换,直至后台接收到的为正常的内容为止。

2,后台接收正常之后,期间有没有什么其他 *** 作(一般很少有变化),那就是在存储数据库的时候,对于数据库的编码有没有设定,如果没有设定的话,那就设定一下对应系统设置数据库编码的地方为 utf-8

其他的情况可能就得看真实环境进行分析

数据库中关于字符集的种类有很多,个人建议,数据库字符集尽量使用utf8(utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束 对编程有影响的主要是客户端字符集和数据库字符集(还有一个服务器字符集,不知道干什么用的), 数据库中常用的 *** 作就是保存数据和读取数据,在这过程中,乱不乱码和数据库字符集貌似没有什么关系。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次 *** 作的客户端字符集一致即可。

在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。

三个MySQL的系统变量是:

1 character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式

2 character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式

3 character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式

在MySQL终端通过执行命令 show variables like ‘char%’ 可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]就可以修改这三个变量的值。一般来说,只要你设定了能够表示你的数据的字符集,你查询的结果都可以在终端正确显示。

举个例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下

mysql> create table t1 ( c1 text not null ) character set utf8;

用的字符是汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83

用下面的SQL语句插入数据

mysql> insert into t1 values( ‘范’);

a)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1 ) from t1 得到数据的十六进制编码来验证。

b)如果终端设置为 utf8,并且执行了set names gbk,那么执行完这个插入 *** 作后,写入的二进制数据是E9 91 BC,这是“汉字“锣”的utf8编码。这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插入的时候进行了一次gbk到utf8的转换,结果当然是错误的。

c)如果终端设置为gbk,并且执行了set names gbk,那么执行完插入 *** 作后,写入t1的依然是“范”这个字的utf8编码。插入过程中,终端输入的是“范”的gbk编码B7 B6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8的编码转换。

d)如果终端设置为gbk,并且执行了set names utf8,那么执行完插入 *** 作后,MySQL会报出一个数据被截断的警告。实际上,输入终端的是“范”这个字符的gbk编码B7 B6,而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据的时候,发现B7 B6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3F 3F,也就是两个问号。

查询的时候是同样的道理,MySQL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码。

结论是,只要终端的字符集和set names指定的字符集一致就可以让MySQL在处理过程中执行正确的转码并且正确地显示。

另外,如果通过程序 *** 作MySQL数据库, 那么也需要事先执行set names命令来指定程序希望输出的字符集。比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据。

以上就是关于MYSQL数据库中文乱码问题,导入的数据中文显示乱码,在保持数据不变的情况下,怎么转化为正常的中文全部的内容,包括:MYSQL数据库中文乱码问题,导入的数据中文显示乱码,在保持数据不变的情况下,怎么转化为正常的中文、python mysql入库 中文出现乱码 怎么解决 求助、mysql导入数据库后 汉字变乱码了 怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9694428.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存