【问题标题】:Error since changing my mysql database to UTF-8将我的 mysql 数据库更改为 UTF-8 后出错
【发布时间】:2016-05-06 20:02:29
【问题描述】:

我一直在向我的数据库中插入一些外国名称,我意识到我需要从标准的拉丁语/瑞典语更改为 UTF-8。我实际上将其全部更改为 utf8mb4_general_ci。它现在可以正确显示字符,但我遇到了一个小问题。从文本文件(以 utf-8 编码)中检索代码时,它会正确获取代码(例如 FO),但在将其保存到数据库后,它现在显示为 \r\nFO。我不确定这些额外字符是从哪里提取的,但我认为不是来自文件。

我在转换过程中是否做错了什么,我需要在保存之前对字符串做些什么,还是与我将它保存到数据库的方式有关?

我知道关于这个问题有很多主题,包括 SO,但是有很多,我还没有找到与这个特定问题相关的主题。

一些编辑...。我在 Notepad++ 中打开了“显示所有符号”,并且 CR LF 在行尾正确显示。

插入数据库的代码是...

        $query = $db->prepare("INSERT INTO players 
        (Name, DetailsJSON)
        VALUES (:Name, :NewDetails)");

        $query->bindParam(':Name', $this->Name, PDO::PARAM_STR);
        $query->bindParam(':NewDetails', $this->DetailsJSON, PDO::PARAM_STR);

        $query->execute();
        $this->ID = $db->lastInsertID();

【问题讨论】:

  • \r\n 看起来像是一个严重转义的 Windows 回车/换行
  • 插入 var_dump($this->Name);var_dump($this->DetailsJSON);查询前。这会告诉你……一切。必须有换行符或'\r\n'
  • 酷,var_dump 确实显示了它,它在查询之前就已经存在了。我会尝试使用 var_dump 更早地追踪它,并找出它何时被拾取。
  • 别忘了 trim()
  • Trim 至少已将其删除,但也许我应该 var_dump 进一步回溯以找出它的来源。谢谢。

标签: php utf-8 notepad++


【解决方案1】:

并且 CR LF 正确显示在行尾。

CR = \r

LF = \n

所以问题出在您的 PHP 代码中。您阅读文件,修剪换行符。但是如果不修剪代码的某些部分,就会将所有 CRLF 转换为它们的文本表示形式。

【讨论】:

  • 我的意思是,如果我打开 Notepad++ 中的选项以显示所有代码,我会在每行的末尾看到 CR LF。我发现正在发生的事情是我拆分行的方式(使用 Explode),似乎上一行的 CR LF 被附加到代码的开头。修剪修复它。
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2015-10-10
  • 2013-12-02
  • 2011-02-02
  • 2021-05-21
相关资源
最近更新 更多