Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php和mysql数据库中正确进行字符编码_Php_Mysql_Character Encoding_Phpmyadmin - Fatal编程技术网

如何在php和mysql数据库中正确进行字符编码

如何在php和mysql数据库中正确进行字符编码,php,mysql,character-encoding,phpmyadmin,Php,Mysql,Character Encoding,Phpmyadmin,可能重复: 查找解决方案的上限和下限。在发布这个问题之前,我已经尝试了很多变体 在phpMyAdmin和html页面中显示相同的名称需要什么?这甚至可以实现吗 编辑1:这似乎是mysql的问题。为什么?因为php生成的html页面将始终显示正确的字符。此时,只有数据库显示不正确 编辑2:澄清。使用代码剪贴和下图中显示的原始设置 输入João并提交 数据库中显示的JoÃo 重新加载后的João显示 添加mysqli\u查询($link,'SET NAMES utf8') 输入João并提交 若昂

可能重复:

查找解决方案的上限和下限。在发布这个问题之前,我已经尝试了很多变体

在phpMyAdmin和html页面中显示相同的名称需要什么?这甚至可以实现吗

编辑1:这似乎是mysql的问题。为什么?因为php生成的html页面将始终显示正确的字符。此时,只有数据库显示不正确

编辑2:澄清。使用代码剪贴和下图中显示的原始设置

  • 输入João并提交
  • 数据库中显示的JoÃo
  • 重新加载后的João显示
  • 添加
    mysqli\u查询($link,'SET NAMES utf8')

  • 输入João并提交
  • 若昂在数据库中显示
  • 乔�o重新加载后显示
  • 结束编辑2

    在mysql数据库中,使用phpMyAdmin查看:

    数据库中的项目如下所示:(我修改了第一个João,使其在数据库中显示正确)

    在编码设置为的html页面中,名称显示为(顺序颠倒&修改为黑色菱形)

    编码:

    我尝试将列排序规则更改为utf8\u bin、utf8\u general\u ci、utf8\u unicode\u ci,但两边都没有更改。还将文档(BBEdit)从UTF-8更改为UTF-8(带BOM)、ISO拉丁语1和Windows拉丁语1。其中一些钻石制造了更多的黑钻石,使问题更加严重。(在图像中设置为UTF-8)我甚至尝试用编码的等价物替换preg_ã等

    简短的故事是,João在页面上输入(上面的内容类型),JoÃo在数据库中,João在刷新时进入html页面


    寻找想法。谢谢。

    确保您的数据库连接也使用UTF-8。试着把下面的行放在你的页面上面

    mysql_query("SET NAMES utf8");
    

    默认PHP讨厌UTF8。确保您使用的是函数,而不是通常的内置字符串函数。

    确保您的html页面以及参与AJAX数据交换的脚本都具有适当的HTTP头,包括

    Content-Type: text/html; charset=UTF-8
    

    由于html端编码设置可能会被浏览器忽略,字符集问题通常很难解决。基本上,您需要确保以下所有内容都是正确的:

    • 数据库连接使用UTF-8
    • DB表使用UTF-8
    • DB表中的各个列使用UTF-8
    • 数据实际上正确地存储在数据库内部的UTF-8编码中(如果您是从错误的源导入的,或者更改了表或列排序规则,则通常不是这种情况)
    • 该网页正在请求UTF-8
    • Apache正在提供UTF-8
    下面是一个很好的教程,介绍如何从头到尾处理该列表:



    听起来您的问题特别是您使用了双重编码(或三重编码)字符,可能是因为更改了字符集或导入了具有错误字符集的已编码数据。在上面的教程中有一整节都是关于修复的。

    也许你需要告诉你的数据库连接,接收的数据是UTF-8格式的。。。这不是自动的我开箱即用。。。您选择了哪种连接方式?mysql(希望不是)、mysqli或pdo?@Pekka Nice。谢谢你指向那个参考资料。@MarkusI。使用mysqli phpMyAdmin报告“连接排序:utf8\U常规\U ci”(也使用utf-8\U unicode\U ci)。这就是您所指的吗?这似乎是一个不需要动脑筋的问题,但请确保您所关注的角色集也已安装并为您的浏览器启用。我至少遇到过一种情况,由于本地配置,一切正常,但显示错误;在建立了你的连接之后…哇,我正在努力。将其包含在db条目脚本中(条目之前),现在:
    João
    在db中,
    Jo�o html中的
    。运气不好。您在db会话中使用正确的字符集插入和检索的数据会发生什么情况?@symcbean我想您是在为您的帖子上方的anwswer提问。添加查询代码1984建议“扭转”问题。有关摘要,请参见编辑2。不理解您的答复。在您对coder1984回答的第一个评论中,不清楚您从数据库中检索到了什么值—最初插入的值、修改的值或使用正确的连接类型通过php插入的值。脚本没有使用任何字符串函数。事实上,字符串是通过ajax发送到数据库的。然后重新加载页面。这是一个php生成的页面。如果能在你的问题中看到一些代码,那就太好了。Eugene,这里可能有一些东西。请求为:Accept-
    字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3,响应为:
    内容类型:text/html;charset=utf-8
    老实说,我不确定谁在对谁做什么,这个字符集问题。。。该请求有两套。(?)显示Jo的页面的响应标题是什么�而不是João?好问题。和我在问题上面的回答一样。嗯。。。您以前的记录可能是以错误的编码存储的?你能试着从phpMyAdmin添加一些国际文本以确保它;这是一个纯粹的UTF-8,然后尝试查看HTMLIt将呈现什么。检查AJAX请求/响应的标题也可能会有所帮助。这是一个解决问题的系统方法的好答案。Thx(需要一些时间来消化)是的,这是一组复杂的互锁问题。几个月前,我花了四个小时帮助别人处理这个版本。结果是数据库中的双重编码字符,这在我有限但痛苦的经历中是非常常见的。