PHP插入MYSQL数据库中文变成乱码 问号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP插入MYSQL数据库中文变成乱码 问号相关的知识,希望对你有一定的参考价值。

字段name的编码为utf8_unicode_ci
表的编码也为utf8_unicode_ci
数据库的编码也是
php编码也是utf-8,但是插入之后在数据库里仍然是乱码

代码中有加入:
mysqli_query($db,"set names ’utf8’ ");
mysqli_query($db,"set character_set_client=utf8");
mysqli_query($db,"set character_set_results=utf8");

加入之后变成问号……

只有插入会这样,如果读取的话加上前面三句就可以正常显示中文

去MYSQL里面设置,不要在PHP里设置MYSQL的编码,乱码肯定就是编码问题无疑,推荐你先把MYSQL里面表的编码改好,然后再把PHP的编码改好,这样就应该没问题了。追问

MYSQL已经是utf8了,PHP也是,但是插入的时候还是问号
读取出来显示到PHP上就正常

追答

读取的数据不需要做处理就显示正常吗?你MYSQL是用什么打开的?PHPMYADMIN?还是其他的数据库管理软件,如果是PHPMYADMIN的话,你把当前游览器的编码设置一下

追问

读取的数据要加下面三行才能显示正常:
mysqli_query($db,"set names ’utf8’ ");
mysqli_query($db,"set character_set_client=utf8");
mysqli_query($db,"set character_set_results=utf8");

否则是问号
当前浏览器是utf-8

追答

你插入数据的时候,前面加入这个mysqli_query($db,"set names ’utf8’ "); 后2个不需要。你看下问题是否解决了

追问

不行

追答

你那个PHP文件的当前页面编码是不是UTF8。。如果PHP文件的编码不是UTF8,也可能会出现这种情况,用编辑器看看PHP文件编码吧,看是不是UTF8无BOM

追问

本来是utf-8,现在改成utf8无bom也不行

追答

无能为力,不清楚啥情况了,还有最后一个办法就是,你胡乱改一改编码格式,比如都改成GBK的,也许就正常了,正常以后再改回utf8,如果还不行,不知道问题再那里,考虑重新安装数据库吧

追问

嗯好吧

参考技术A 字段和表结构改成 utf8_general_ci 编码追问

改了,没用
utf8_unicode_ci 和utf8_general_ci 差别不是很大把

追答

那就改成GBK试试

mysql中文乱码--存入mysql里的中文变成问号的解决办法

今天,服务器里测试的时候,发现存入数据库的中文全部变成问号了!

 

首先想到这是编码问题:于是乎再次设置数据库的编码为utf8

可是,问题仍然存在:

 

后来发现,这个问题的根源应该是:

虽然数据库编码是utf8,但是数据库里的表和字段不是utf8

所以要解决这个问题,必须要将数据库的表和字段的编码都设置为utf8:

一下是设置办法:

修改数据库表编码为utf8:ALTER TABLE `table` DEFAULT CHARACTER SET utf8;

修改数据库字段编码为utf8,当然你可以一个一个字段修改,不过我告诉你一次性修改的命令:alter table `tablename` convert to character set utf8; 


以上是关于PHP插入MYSQL数据库中文变成乱码 问号的主要内容,如果未能解决你的问题,请参考以下文章

解决Linux系统下Mysql数据库中文显示成问号的问题

向MySql数据库中插入一条数据后性别变成问号是怎么回事

mysql中文乱码--存入mysql里的中文变成问号的解决办法

在oracle数据库中插入的冷僻字都会变成问号,这个怎么解决。

mysql设置存储中文变成问号或者乱码

mysql出现乱码