MySQL选择不同的排序规则

时间:2017-02-01 13:12:06

标签: mysql collation

MySQL5.5

据我所知,排序规则是排序和比较字符串的规则集, 例如,他们可以将'Mane'视为与'Manè'相同。 对我来说,只有在比较两个文本字符串的情况下,整理才有意义。

我有一张包含latin1字符集和latin1_swedish_ci整理

的表格
CREATE TABLE `swedish` (
  `c` char(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

引擎,charset和collat​​ion都有约束条件。

insert into swedish values ('Bar'), ('Bär'), ('Ber'), ('Bêr'), ('Yac'), ('Yaç');

我需要使用ASCII搜索值进行不区分大小写和重音不敏感的搜索,我想使用排序latin1_german1_ci将这3对夫妇视为相同。

我在docs中看到了如何做到这一点

-- it works with 'ber' or 'yac' as well
-- 'like' instead of '=' works as well
select c from swedish where c = _latin1 'bar' collate latin1_german1_ci;

给出

+------+
| c    |
+------+
| Bar  |
| Bär  |
+------+

好的,有效,这就是我所需要的。但为什么呢?

IIRC _latin1 'bar' collate latin1_german1_cicharacter set introducer,它定义(强制?)字符串'bar'的字符集和整理。 所以我看到两个collat​​es,瑞典语用于搜索词的列'c`和german1的值。

where子句会发生什么?列`c` collat​​ion latin1_swedish_ci中是否有选中的字符串?但那时比较应该给出一个错误。它是以某种方式转换为排序latin1_german1_ci

如果我不使用charset介绍人,'bar'的搜索只会给'bar',我认为这是瑞典校对的预期行为。

继续,如果我做

select c from swedish where c = _latin1 'bär' collate latin1_german1_ci;

它给出了0行,为什么会这样?

P.S。 我找不到关于不同排序规则的任何详细文档,有谁知道在哪里可以找到一些信息?

0 个答案:

没有答案