【问题标题】:MySQL encoding issue with Turkish characters土耳其字符的 MySQL 编码问题
【发布时间】:2012-01-02 16:05:27
【问题描述】:

我正在使用 WAMP 服务器。我有我的 php.ini 设置为 utf-8,我也有 header('Content-Type: text/xml; charset=utf-8'); 在我的 php 和 @mysql_query("SET NAMES utf8"); 在我的连接文件中。

MySQL 排序规则设置为 utf8_turkish_ci,当我直接从 phpMyAdmin 编写查询时,土耳其语字符 ç、ş、ö、ğ 等会正确显示。但是当我尝试从 php 表单提交它们时,它们会在数据库中变成奇怪的字符,但是当我用 php 再次编写它们时,它们会正确显示。

我的问题是,当我直接从 phpMyAdmin 输入查询时,它们无法在 PHP 中正确显示,反之亦然,当我从 PHP 输入查询时,它们无法在数据库中正确显示。我该如何解决?

【问题讨论】:

    标签: php mysql ajax encoding


    【解决方案1】:

    当您使用脚本编写文件时,您的数据已正确存储在数据库中。这一点的证据是,当您回显数据时,它们会显示正确。如果您在 phpmyadmin 中没有看到格式正确的数据,则表示该页面未正确设置为显示 utf-8。

    最简单的检查方法是Ctrl+U查看你的phpmyadmin的源代码并查找:

      < meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    

    它还应该显示:

    MySQL charset: UTF-8 Unicode (utf8)
    MySQL connection collation:    utf8_unicode_ci
    

    在您打开 phpMyAdmin 的第一页。如果您没有看到这两个,请按照以下步骤进行修复:

    A) 我能想到的即时解决方案是将浏览器的字符编码更改或强制为 utf-8。在 Mozilla Firefox 中,可以通过 View -> Character Encoding -> Unicode (UTF-8) 进行设置

    或 B) 另一个优雅的解决方案可能是更改 phpMyAdmin 配置,以便它在 Content-Type 标头中发送和设置正确的字符集为 Content-Type: text/html;字符集=utf-8 。为此,我们必须编辑位于 phpMyAdmin 根目录的 config.inc.php 文件:

    $cfg['DefaultCharset'] = 'utf-8'; and 
    $cfg['AllowAnywhereRecoding'] = true; 
    

    这些配置更改应发送正确的标头。无论如何,如果 lang cookie 已经设置为其他字符集,它不会反映更改。因此,可能需要清除 cookie 才能看到更改。

    以上解决方案的功劳:http://rajeshanbiah.blogspot.com/2004/12/storing-unicode-texts-in-mysql-with.html

    【讨论】:

    • 在另一台计算机上,我刚刚添加了行 mysql_query("SET NAMES 'utf8' COLLATE 'utf8_turkish_ci'");在我的连接 php 中,没有从 phpmyadmin 更改任何内容,它运行良好,我希望它在我在主机上工作时能正常工作。
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多