使用英文字符的搜索是否返回带有外文字符的结果?我编写了以下脚本来比较 MySQL 5.7 中的排序规则(也适用于 MariaDB 10.2+):
$db->query('CREATE TABLE IF NOT EXISTS test (name varchar(20))
Engine=InnoDB character set utf8mb4 collate utf8mb4_unicode_520_ci');
$db->query('CREATE TABLE IF NOT EXISTS test2 (name varchar(20))
Engine=InnoDB character set utf8mb4 collate utf8mb4_unicode_ci');
$db->query("insert into test values('Łove 520')");
$db->query("insert into test2 values('Łove 520')");
$types = ['utf8mb4_unicode_520_ci', 'utf8mb4_unicode_ci'];
$tables = ['test' => 'utf8mb4_unicode_520_ci', 'test2' => 'utf8mb4_unicode_ci'];
foreach($types as $n)
{
foreach($tables as $ta => $tc)
{
$db->query("SET NAMES 'utf8mb4' COLLATE '$n'");
$res = $db->query("Select * from $ta where name like 'Love%'"); // Ł equal
echo "\ntable $ta($tc), names($n): ".$res->fetchColumn(0);
}
}
结果如下:
table test(utf8mb4_unicode_520_ci), names(utf8mb4_unicode_520_ci): Łove 520
table test2(utf8mb4_unicode_ci), names(utf8mb4_unicode_520_ci):
table test(utf8mb4_unicode_520_ci), names(utf8mb4_unicode_ci): Łove 520
table test2(utf8mb4_unicode_ci), names(utf8mb4_unicode_ci):
(注意:我从命令行运行脚本,所以它显示为 ┼üove 520 而不是 Łove 520)
当表排序规则为 utf8mb4_unicode_ 520 _ci 时,无论连接排序规则如何,似乎 L == Ł 。但是,如果您只使用 utf8mb4_unicode_ci ,它是不等价的。