【问题标题】:Garbled characters from MySQL来自 MySQL 的乱码
【发布时间】:2017-10-27 18:29:16
【问题描述】:

我有两台服务器。每个都运行 PHP/MySQL。我将剪贴板中的 6 个字符的字符串粘贴到两个数据库中新创建的表中。检查表列显示字符集和排序规则在两台服务器上都设置为“utf8”和“utf8 general ci”。然后我在两台服务器上运行以下相同的脚本。

<meta charset="utf-8">
<?php
$sql = "SELECT * FROM temp";
$link=mysqli_connect($DB_SERVER,$DB_LOGIN,$DB_PASSWORD,$DB);
$result=mysqli_query($link,$sql);
mysqli_close($link);
$row=mysqli_fetch_object($result);
$details=$row->details;
echo $details;
?>

一个服务器将以下内容发送到屏幕

“好”

另一个在同一浏览器 (Firefox) 中将其发送到屏幕

‘好’

谁能发现问题或建议我如何解决这个问题?

【问题讨论】:

  • 如何将数据导入 mysql?字符也可能在输入的过程中被破坏。你说你从剪贴板复制它,但它必须比这更复杂:你使用什么程序将数据实际获取到 mysql 中?这显然不能解决您的问题,但只是指出,首先可能进行修改的唯一原因是因为您的单引号实际上不是单引号,而是 unicode 字符,很可能是 U+2018 和 U+2019
  • 我会直接检查两个数据库以查看数据库中的内容(最好从命令行使用 mysql)。如果您在两者中看到相同的内容,则字符可能会在输出时受到破坏。如果存储了不同的结果,那么您的字符在输入时会被破坏。

标签: mysql encoding collation


【解决方案1】:

问题:

浏览器误解了编码。

可能的原因:

  1. 你没有指定mysqli连接的编码,使用mysqli::set_charset()
  2. 您没有指定启用 Unicode (UTF-8) 的 HTML 5 doctype &lt;!DOCTYPE html&gt;
  3. 在 HTTP 标头中指定了另一种编码
  4. 网络服务器使用另一种编码为页面提供服务并覆盖header()
  5. 如果没有配置,一个 PHP 实例的配置可能与另一个实例不同。
  6. 如果未配置,一个 PHP 实例可能是 5.6 之前的旧版本,默认情况下未配置 UTF-8。
  7. 数据以不同方式粘贴到两个数据库中,您可能需要仔细检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多