代码之家  ›  专栏  ›  技术社区  ›  CMR

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

  •  0
  • CMR  · 技术社区  · 11 年前

    我们正在运行一个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

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

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

    谢谢

    1 回复  |  直到 11 年前
        1
  •  0
  •   Daniel W.    11 年前

    正如我们在评论中已经发现的问题一样,以下是解决方案:

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

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

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

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