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

Php mysql特殊字符-字符串值不正确'\xE1n';,php,mysql,character-encoding,collation,Php,Mysql,Character Encoding,Collation,我们正在运行一个cron脚本,它从csv中获取新用户并将其插入我们的数据库。每当它遇到一个名字中有特殊字符的用户时,它就失败了,但我不明白为什么,因为我能看到所有的设置都是为了让它工作 下面是一个失败的名称示例: Siobhán 错误消息: !! Incorrect string value: '\xE1n' for column 'firstname' at row 1 然后,它试图插入的数据的var_转储的名称为:Siobh,因此它会切断特殊字符 以下是数据库上显示变量(如“char%”

我们正在运行一个cron脚本,它从csv中获取新用户并将其插入我们的数据库。每当它遇到一个名字中有特殊字符的用户时,它就失败了,但我不明白为什么,因为我能看到所有的设置都是为了让它工作

下面是一个失败的名称示例:

Siobhán
错误消息:

!! Incorrect string value: '\xE1n' for column 'firstname' at row 1
然后,它试图插入的数据的var_转储的名称为:
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\u unicode\u ci

firstname和lastname列的排序规则是
utf8\u unicode\u ci

php脚本的标题集:

content-type: text/html; charset=utf-8
当我在变量传递到查询之前对其运行
mb\u detect\u encoding()
时,它返回为
UTF-8

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

有人知道我们哪里出了问题吗


谢谢

因为我们已经在评论中发现了问题,下面是解决方案:

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

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

请参阅此以获取帮助:


无论您的脚本将数据从csv中取出或放入csv中,数据都必须转换或已在utf-8中。

您是否将csv保存为utf-8?csv是由另一个部门的脚本自动生成的。是否仍要检查?使用文本编辑器打开。记事本++适合我的需要。请确保您的其他脚本也保存为utf-8,并且您复制的所有数据都是utf-8编码的。您好,此脚本每晚都自动运行,因此,如果您的意思是这样的话,我们不能每次手动进入并以不同的编码保存文件。当我在notepad++中打开csv时,编码已选择ANSI,但这是列表的顶部,因此它可能只是默认值。如果我将其切换为utf8,则记事本++中的名称将更改为
SiobhxE1n
,其中
xE1
以黑色突出显示为字符。