Php utf8在mysql中失败但在csv import上没问题

时间:2017-05-15 11:31:20

标签: php mysql unicode utf-8 internationalization

这是在我的Windows测试平台上。

我有以下csv:

You have signed out successfully!,ar,لقد خرجت بنجاح!

我有以下表格定义:

CREATE TABLE `translations` (
  `sourcephrase` varchar(250) NOT NULL,
  `language` char(5) NOT NULL,
  `translatedphrase` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`sourcephrase`,`language`),
  KEY `language` (`language`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

如果我将这个csv加载到表中(通过mysql workbench,导入csv),我得到的数据就好了。

sourcephrase, language, translation
You have signed out successfully!   ar  لقد خرجت بنجاح!

如果我运行这个PHP代码(其中psquery只是执行一个预准备语句):

    $sourcephrase="You have signed out successfully!";
    $language="ar";
    $translated="لقد خرجت بنجاح!";
    $sql = "insert into translations (sourcephrase, language, translatedphrase) values (?,?,?)";
    $this->DB->psquery($sql, array("sss", $sp, $language, $translated));

该表包含以下数据:

You have signed out successfully!   ar  لقد خرجت بنجاح!

为什么我在php中得到不同的结果? (我知道它与utf8有关,但我看不清楚)。我不相信它的mysql相关,因为csv导入就好了。

1 个答案:

答案 0 :(得分:1)

لقد خرجت بنجاح!是Mojibake的所需字符串。有关可能的原因,最佳做法和调试技巧,请参阅this

这个项目可能与您的PHP连接有关:“INSERTing和SELECTing文本时的连接需要指定utf8或utf8mb4。”