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

问题描述:

我们正在运行一个cron脚本,它从csv接收新用户并将它们插入到我们的数据库中。只要遇到名称中带有特殊字符的用户,它就会失败,但我不明白为什么,只要我能看到所有设置都应该起作用。mysql特殊字符 - 不正确的字符串值' xE1n'

这里有一个名字它的失败上的例子:

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

名字和姓氏列的排序规则是utf8_unicode_ci

php脚本的首部设置了:

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

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

所以我在这里想出了为什么它失败...

有没有人有任何想法,我们要去哪里错了?

感谢

+0

您是否将CSV保存为UTF-8? – DanFromGermany

+0

csv由另一个部门的脚本自动生成。无论如何检查? –

+0

用你的文本编辑器打开。 Notepad ++符合我的需求。确保您的其他脚本也保存为utf-8,并且您复制的所有数据都是utf-8编码的。 – DanFromGermany

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

程序创建CSV文件,并创建以ANSI格式的文件。 它需要用UTF-8编写。

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

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

无论你的脚本由和成CSV获取数据,数据必须被转换或者已经是UTF-8。