PHP/MySQL中的Unicode比较
当我进行数据库查询以更新列时,名称Accîdent似乎与AccÎdent不同。然而,指向同一个地方 在MySQL中,插入时Accîdent=AccÃêdent。 此外,AccÎdent=AccÃŽdentPHP/MySQL中的Unicode比较,mysql,unicode,Mysql,Unicode,当我进行数据库查询以更新列时,名称Accîdent似乎与AccÎdent不同。然而,指向同一个地方 在MySQL中,插入时Accîdent=AccÃêdent。 此外,AccÎdent=AccÃŽdent 您知道这是为什么吗?默认情况下,MySQL假定客户端使用latin1字符集。如果您在PHP脚本中使用UTF-8,那么这个假设是错误的。您需要在数据库连接打开后发出以下SQL语句,向MySQL指定您正在使用UTF-8: SET NAMES utf8 然后,由以下SQL语句插入的数据将使用正确的
您知道这是为什么吗?默认情况下,MySQL假定客户端使用
latin1
字符集。如果您在PHP脚本中使用UTF-8,那么这个假设是错误的。您需要在数据库连接打开后发出以下SQL语句,向MySQL指定您正在使用UTF-8:
SET NAMES utf8
然后,由以下SQL语句插入的数据将使用正确的字符集。这意味着您需要重新插入数据或遵循(参见最后几段)
建议将表配置为以UTF-8格式存储数据,以避免不必要的读/写字符集转换。不过,这不是必需的
有关更多信息,请参阅。具体而言,.- 首先,您似乎将UTF-8数据存储在不同编码的表中。MySQL将尝试应对,但副作用正如您所见——数据库中的数据看起来“怪异”。创建表时,需要指定字符编码-最好是UTF-8。对于现有表,您需要转换数据
- 其次,表在编码旁边有一个“排序规则”。编码决定字符如何映射到字节,排序规则决定排序和比较。有特定于语言的排序规则,但是
应该是您要查找的排序规则(utf8\u general\u ci
表示“不区分大小写”)-那么您的两个字符串将匹配ci
latin1
而不是utf8
),而不是表字符集。看看我自己的答案。@e-t172:这是可能的。在OP提供更多信息之前,我会谨慎地说出问题的确切原因。