0

我们正在运行一个 cron 脚本,它从 csv 中获取新用户并将它们插入到我们的数据库中。每当遇到名称中有特殊字符的用户时,它都会失败,但我不明白为什么,据我所知,一切都已设置好,它应该可以工作。

这是一个失败的名称示例:

Siobhán

错误信息:

!! Incorrect string value: '\xE1n' for column 'firstname' at row 1

然后它试图插入的数据的 var_dump 的名称为:Siobh所以它切断了特殊字符

这是我们数据库中显示变量(如 'char%')的输出:

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

用户表的排序规则是utf8_unicode_ci

firstname 和 lastname 列的排序规则是utf8_unicode_ci

php脚本的头部设置:

content-type: text/html; charset=utf-8

当我mb_detect_encoding()在变量传递到查询之前对其运行时,它会返回为UTF-8

所以我不知道为什么它会失败......

有没有人知道我们哪里出错了?

谢谢

4

1 回答 1

0

由于我们已经在评论中发现了问题,这里是解决方案:

创建 csv 文件的程序确实以 ANSI 格式创建文件。它需要用 UTF-8 编写。

这意味着数据的实际来源本身也需要是 UTF-8,并且您的所有 PHP 文件也应该是 UTF-8。

看到这个寻求帮助:http ://www.php.net/manual/de/function.fopen.php#104325

无论您的脚本在何处将数据从 csv 获取或导入 csv,数据都必须经过转换或已经在 utf-8 中。

于 2013-09-26T11:26:27.480 回答