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