Php utf8 在 mysql 中失败,但在 csv 导入时正常

标签 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 导入就可以了。

最佳答案

لقد خرجت بنØØاØ! 是所需字符串的 Mojibake。参见 this可能的原因、最佳实践和调试技术。

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

关于Php utf8 在 mysql 中失败,但在 csv 导入时正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978375/

相关文章:

linux - 在 shell 中打印非 ascii/unicode 字符

php - DBpedia信息抽取框架

PHP 错误警告 : Parameter 1 expected to be a reference

mysql - 检索 MySql 中的连接行

mysql - golang 代码中 mysql 查询的自动递增不起作用

php - 如果一个对象的值在 JSON 文件中为空,则它采用以前的值

c++ - Unicode 异常类

php - 为什么我不能从 PHP 中选择 MySQL 数据库?我得到 "access denied"

PHP表单验证提交问题

python - 我们如何从Python中的glyph id获取unicode?