Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL中的Unicode比较_Mysql_Unicode - Fatal编程技术网

PHP/MySQL中的Unicode比较

PHP/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语句插入的数据将使用正确的

当我进行数据库查询以更新列时,名称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语句插入的数据将使用正确的字符集。这意味着您需要重新插入数据或遵循(参见最后几段)

建议将表配置为以UTF-8格式存储数据,以避免不必要的读/写字符集转换。不过,这不是必需的

有关更多信息,请参阅。具体而言,.

  • 首先,您似乎将UTF-8数据存储在不同编码的表中。MySQL将尝试应对,但副作用正如您所见——数据库中的数据看起来“怪异”。创建表时,需要指定字符编码-最好是UTF-8。对于现有表,您需要转换数据

  • 其次,表在编码旁边有一个“排序规则”。编码决定字符如何映射到字节,排序规则决定排序和比较。有特定于语言的排序规则,但是
    utf8\u general\u ci
    应该是您要查找的排序规则(
    ci
    表示“不区分大小写”)-那么您的两个字符串将匹配


数据库和/或表的排序规则是什么?(您可以通过访问phpMyAdmin中的数据库/表来发现这一点。)您似乎将数据库中的编码弄乱了—插入时,数据看起来应该与以前相同。您的表和相关列是否为utf8?看起来好像你把它们创建为拉丁语1,或者其他一些编码-同时检查连接编码。我在这些链接中看到的唯一区别是第二个链接中有一个尾随空格。我想我应该更清楚地回答我的问题。。。首先我想知道是否有可能在这两种拼写之间建立联系。。。出于某种原因,当玩家将他们的角色添加到数据库时,它将检查数据库,如果数据库不存在,它将添加一个新角色。因此,在这种情况下,同一个字符被添加两次,而实际上它是同一个字符。@Shrapnel上校,请看i的…。请注意,表也需要是UTF-8,否则使用非ASCII字符的操作将失败(或者更糟的是,被无声地更改为乱码)这些表不需要是UTF-8,因为MySQL会在您背后自动处理字符集转换。然而,字符集转换显然是不必要的,并且会导致UTF-8字符出现问题,而这些字符在表字符集中不可表示。它们不需要是UTF-8,对-但是OP的问题就会出现(“它通常在PHP中出现,但当我直接检查数据库时,这一切都很奇怪”)。它们在数据库中看起来不错,因为MySQL会在显示之前将它们转换为“屏幕”编码。问题在于连接字符集(MySQL假设PHP脚本使用的是
latin1
而不是
utf8
),而不是表字符集。看看我自己的答案。@e-t172:这是可能的。在OP提供更多信息之前,我会谨慎地说出问题的确切原因。