【问题标题】:Latin characters in phpMyAdmin with UTF-8 collation带有 UTF-8 排序规则的 phpMyAdmin 中的拉丁字符
【发布时间】:2011-02-27 23:12:02
【问题描述】:

我的网站使用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

还有这个元数据:

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

我在 phpMyAdmin 中创建了我的数据库和表,确保所有内容都设置为 utf8_unicode_ci(表、字段、数据库),甚至连接排序规则。

当我使用 PHP 制作的标准表单将一些拉丁字符(重音符号、ñ 和类似的东西)插入数据库时​​,它工作正常,我可以在我的网站上显示保存的数据。但是如果我去phpMyAdmin,所有的拉丁字符都搞砸了,比如ñññ。

如果我尝试在 phpMyAdmin 中修复该数据,那么我的网站会错误地显示数据,并带有奇怪的符号 ���。

我到底做错了什么?我一直在尝试解决这个问题几个小时,但没有成功。

谢谢大家!

【问题讨论】:

    标签: php encoding phpmyadmin collation utf-8


    【解决方案1】:

    我在同样的问题上苦苦挣扎,终于找到了一种通过 PHP 函数 mysqli_set_charset 来检查和更改排序规则的优雅方法。以下代码必须包含在 $conn 检查和 $sql 查询之间:

    if (!mysqli_set_charset($conn, "utf8")) {
        printf("Error loading character set utf8: %s\n", mysqli_error($conn)); //optional row
        die();
    }
    

    我在这里找到了解决方案:http://php.net/manual/en/mysqli.set-charset.php

    【讨论】:

      【解决方案2】:

      如果 phpMyAdmin 正常(即设置为 UTF-8)并且数据仍然显示奇怪,那么请查看您的数据库连接是否也使用 UTF-8?

      只需设置mysql_query("SET NAMES utf8"); 之后 mysql_connect 行:

      $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
          mysql_query("SET NAMES utf8");
      

      【讨论】:

        【解决方案3】:

        mysql_query("SET NAMES utf8") 解决了我的问题。

        问题:字符在 phpMyAdmin 中正确显示,在 HTML/PHP 中错误。字符:â、î等。

        标题正常(utf8),phpmyadmin 以正确的形式显示内容,但网站一直显示奇怪的问号字符(在黑色菱形字符内)。

        HTML 代码:

        <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        解决方案:我已在 php 中添加(在任何其他查询之前):

        mysql_query("SET NAMES utf8");

        其他原因可能导致这种行为;这只是解决方案的一部分。您可能需要检查内容类型、Web 服务器配置 (httpd.conf)、html 语言/目录、字符集等。但是,黑色菱形中的问号似乎更具体地解决了这个问题/解决方案,在其他情况下是显示了 2-3 个奇怪的字符,而不是你想要的。

        【讨论】:

          【解决方案4】:

          1- 编辑文件:

          my.ini (MsWindos)
          my.cnf (GNU/linux)

          2- 查找 [mysqld] 条目并追加:

            character-set-server = utf8
            skip-character-set-client-handshake
          

          整个视图应如下所示:

          [mysqld]
            port=3306
            character-set-server = utf8
            skip-character-set-client-handshake
          

          3- 重启 MySQL 服务!

          【讨论】:

            【解决方案5】:

            做完mysql_query("SET names 'utf8';"); 您还需要转到 mySQL 并将排序规则定义为 UTF-8! 这应该可以解决您的问题。 祝你好运!

            【讨论】:

              【解决方案6】:

              对于Scuzzu的问题有几种方法:

              http://www.mysqlperformanceblog.com/2007/12/18/fixing-column-encoding-mess-in-mysql/

              我还有八个不同任务的链接,但这个网站阻止我保存它们...

              “作为一种垃圾邮件预防机制,新用户最多只能发布一个超链接”

              【讨论】:

                【解决方案7】:

                如果 phpMyAdmin 显示 ñññ 而不是 ñññ,那是因为它将 UTF-8 字节流解释为 ISO-8859-1。所以你的数据库内容可能是正确的,phpMyAdmin 只是以错误的方式显示它们。

                我不熟悉该应用程序,但您可以强制浏览器以 UTF-8 格式读取页面(通常是查看 > 编码 > UTF-8)。

                【讨论】:

                • 我尝试将 Google Chrome 和 Firefox 编码更改为 UTF-8,但没有成功。 phpMyAdmin 仍然显示奇怪的符号(是的,我重新启动了浏览器)。
                • @Danny 这是 phpMyAdmin 主页上的设置(“语言”设置。您可以在那里选择语言和编码。)
                • 好的,我在两台服务器上都试过了,它们的行为都一样。我的 phpMyAdmin 主页设置为 MySQL 字符集:UTF-8 Unicode (utf8)。我尝试在插入之前通过 utf8_decode() 传递表单中的所有值,我可以在 phpMyAdmin 中看到一切正常,但在我的网站中却看不到,这意味着 phpMyAdmin 是个大问题。但是,为什么我可以从 WordPress 安装中读取保存为 UTF-8 的数据,而不是从我自己的网站保存的数据?
                【解决方案8】:

                正如@Artefacto 所说,这可能是 phpMyAdmin 本地的问题。

                如果 phpMyAdmin 没问题(即设置为 UTF-8)并且数据仍然显示奇怪,那么请查看您的数据库 connection 是否也使用 UTF-8?

                mysql_query("SET NAMES utf8") 
                

                (或任何你用作数据库库的东西) 如果不是,可能会有所帮助。

                【讨论】:

                • 是的,我运行了查询,但一切都保持不变。
                • Pekka 我做错了。因此,一旦我实例化了我的 MySQL 类,我就添加了一个新行来在每个页面上运行该查询,现在一切正常。现在,又来了一个问题:是否可以设置某种默认值,这样我就不需要一直运行 SET NAMES 了?
                • 这就是解决方案。非常感谢!
                猜你喜欢
                • 2014-12-13
                • 1970-01-01
                • 2013-04-21
                • 1970-01-01
                • 2017-03-25
                • 2012-07-25
                • 2012-09-14
                • 2011-12-08
                • 1970-01-01
                相关资源
                最近更新 更多