我们正在运行一个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
所以我在这里没有想到它为什么会失败...
有没有人对我们出错的地方有任何想法?
由于
答案 0 :(得分:0)
正如我们已在评论中发现问题,这是解决方案:
创建csv文件的程序确实以ANSI格式创建文件。 它需要用UTF-8编写。
这意味着数据的实际来源也需要是UTF-8,所有PHP文件也应该是UTF-8。
请参阅此处获取帮助:http://www.php.net/manual/de/function.fopen.php#104325
无论您的脚本从csv获取数据到哪里,数据都必须转换或已经在utf-8中。