这是在我的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 导入就可以了。
最佳答案
لقد خرجت بنØØاØ!
是所需字符串的 Mojibake。参见 this可能的原因、最佳实践和调试技术。
可能这一项与您的 PHP 连接有关:“INSERTing 和 SELECTing 文本时的连接需要指定 utf8 或 utf8mb4。”
关于Php utf8 在 mysql 中失败,但在 csv 导入时正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978375/