【问题标题】:mysql special characters - incorrect string value '\xE1n'mysql 特殊字符 - 不正确的字符串值 '\xE1n'
【发布时间】: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


【解决方案1】:

由于我们已经在 cmets 中发现了问题,这里是解决方案:

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

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

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

无论您的脚本在何处从 csv 中获取数据或将数据导入 csv,数据都必须经过转换或已经采用 utf-8 格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 2011-09-13
    • 2023-04-05
    • 2015-11-06
    • 1970-01-01
    • 2017-06-09
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多