mysql特殊字符 - 字符串值不正确'\ xE1n'

时间:2013-09-26 10:28:13

标签: php mysql character-encoding collation

我们正在运行一个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/

users表的排序规则为utf8_unicode_ci

firstname和lastname列的排序规则为utf8_unicode_ci

php脚本的标题设置:

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

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

所以我在这里没有想到它为什么会失败...

有没有人对我们出错的地方有任何想法?

由于

1 个答案:

答案 0 :(得分:0)

正如我们已在评论中发现问题,这是解决方案:

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

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

请参阅此处获取帮助:http://www.php.net/manual/de/function.fopen.php#104325

无论您的脚本从csv获取数据到哪里,数据都必须转换或已经在utf-8中。