MYSQL无法识别某些特殊字符

时间:2012-02-09 05:19:05

标签: mysql collation

为什么mysql不能识别é以及包括em dash( - )在内的更多字符?这让我疯了。我一直收到像Incorrect string value: '\xE9' for column这样的错误 我使用的是mysql 5.5.6,我的表是innodb并使用collat​​ion utf8-default collat​​ion。 我不知道这是否重要,但我正在从包含特殊字符的csv文件进行批量插入,而我的字段是TEXT类型

4 个答案:

答案 0 :(得分:1)

这可能取决于您的PHP MySQL客户端的连接设置。 Rob Allen's post可能会让你感到厌烦。

不是使用PHP文档明确警告的SET NAMES utf8查询,而是在$mysqli->set_charset('utf8');中为utf8执行此操作built-in function

如果你已经这样做了坏字符的另一种解释是MySQL的UTF-8字符集实际上并不合适utf8mb4 ...它只支持最多3个字节的字符,并且有一些越来越常见的使用4,特别是Emojis。幸运的是,从版本5.5.3开始MySQL已经解决了这个问题:改为使用utf8_general_ci字符集。

在相关说明中,默认utf8字符集中的排序顺序(带有utf8mb4_unicode_ci排序规则)存在许多可能影响您的问题,例如德语。这里的修复是使用{{1}}排序规则,它可以提供更准确但更慢的排序规则。

答案 1 :(得分:1)

您的问题听起来像我过去处理过的问题,我同意Synchro的说法,客户端连接设置可能就是您需要查看的地方。您可能需要在启动连接时指定UTF8字符集。

我使用PDO,并启动与此的连接:

$this->dbConn = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

在我开始使用PDO之前,我使用了这个:

mysql_query("SET NAMES 'utf8'"); 

请参阅http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

答案 2 :(得分:1)

我有一个类似的问题试图SELECT ... WHERE table_col LIKE "%–%"(长划线)结果证明它无法正常工作,因为发送查询的.php文件不是UTF8而是ANSI!将它转换为UTF8就可以了!!!

答案 3 :(得分:1)

确保CSV文件是UTF8而不是默认的ANSI。为此,请在记事本中打开csv文件并使用另存为选项,确保编码为UTF8。