lamp环境下,从mysql中读取的中文内容乱码

数据库字符集也设置了utf8或者gbk。但还是乱码,
lamp环境下,从mysql中读取的中文内容乱码0

我在1年前使用虚拟机的时候就出现了这种的乱码样式,如今是真实服务器了,却又出现乱码。 这是怎么回事?谁遇到过?

回复讨论(解决方案)

lamp环境下,从mysql中读取的中文内容乱码1

但是从数据库中进行查询, 还是正常的

你的数据入库时没有设置工作语言(set names xxx)

所以在出库时,也不要设置工作语言

如果想深究,请贴出查询结果的 base64 编码

这是set names utf8查询出的结果,确实和我乱码的一模一样

lamp环境下,从mysql中读取的中文内容乱码2

这是我set names gbk 查询出的结果。也是乱码

lamp环境下,从mysql中读取的中文内容乱码3

@xuzuning 那么请问 您说的base64 编码是怎么个意思 不太明白

不用 set names xxx 时输出是什么样的?

你用程序查询后,比如有中文内容的字段 name 的内容在 $name 中

就 echo base64_encode($name); 贴出结果

@xuzuning

这是我当前的字符集。不用set names xxx 在mysql里查询的时候,数据一切正常,但是如果设置为gbk或者utf8那就乱码了。

lamp环境下,从mysql中读取的中文内容乱码4

我把我项目的数据库配置文件改为了拉丁 ,现在页面已经显示正常了。

问题虽然解决了,但是我不明白啊 为什么数据库这里的默认字符集是拉丁的,我一旦修改为utf8 或者gbk就会乱码。

这个问题您知道怎么造成的吗?

latin1 是单字节字符集,可保存码值为 0~255 的字符

gbk、utf8 是多字节字符集,只能保存符合编码规则的数据

latin1 可以按字节容纳 多字节字符集,但不能与多字节字符集做编码转换

这就是你乱码的原因

latin1 是单字节字符集,可保存码值为 0~255 的字符

gbk、utf8 是多字节字符集,只能保存符合编码规则的数据

latin1 可以按字节容纳 多字节字符集,但不能与多字节字符集做编码转换

这就是你乱码的原因

那出现latin1作为mysql的默认字符集的原因是什么?

我该如何使用utf8作为字符集 并且正常输出呢?

多谢大侠

show create table 表名

贴出来看看

修改mysql的my.ini文件中的字符集键值

如 default-character-set = utf8

character_set_server = utf8

修改完后,重启mysql的服务

Posted in 未分类