这是在我的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导入就好了。
答案 0 :(得分:1)
لقد خرجت بنجاØ!
是Mojibake的所需字符串。有关可能的原因,最佳做法和调试技巧,请参阅this。
这个项目可能与您的PHP连接有关:“INSERTing和SELECTing文本时的连接需要指定utf8或utf8mb4。”