【发布时间】:2013-09-26 10:28:12
【问题描述】:
我们正在运行一个 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
名字和姓氏列的排序规则是utf8_unicode_ci
php脚本集的头部:
content-type: text/html; charset=utf-8
当我在变量传递到查询之前对变量运行mb_detect_encoding() 时,它会以UTF-8 的形式返回
所以我不知道它为什么会失败......
有没有人知道我们哪里出错了?
谢谢
【问题讨论】:
-
您是否将 CSV 保存为 UTF-8 ?
-
csv 是由另一个部门的脚本自动生成的。有什么要检查的吗?
-
用你的文本编辑器打开。记事本++符合我的需要。确保您的其他脚本也保存为 utf-8,并且您复制的所有数据都是 utf-8 编码的。
-
嗨,这个脚本每晚自动运行,所以我们不能每次都手动输入并以不同的编码保存文件,如果这就是你的意思。当我在记事本 ++ 中打开 csv 时,编码选择了 ANSI,但这是列表的顶部,因此它可能只是默认值。如果我将其切换为 utf8,则记事本 ++ 中的名称将更改为
SiobhxE1n,其中xE1以黑色突出显示为一个字符。
标签: php mysql character-encoding collation