MySQL/MariaDB不区分大小写的排序规则仍然区分大小写?

MySQL/MariaDB不区分大小写的排序规则仍然区分大小写?,mysql,mariadb,collation,lowercase,Mysql,Mariadb,Collation,Lowercase,使用MariaDB 10.0.36,我有一个带有utf8_turkish_ci排序规则的用户表,其中有一个user_login列,该列存储用户的用户名,该用户名也使用带有唯一索引的utf8_turkish_ci排序规则 我的理解是select语句应该不区分大小写,但对于某些用户名似乎不是这样 例如,我有一个登录名为GoDoIt的用户 此语句不返回任何记录: 从用户登录名为'godoit'的用户中选择* 然而,这是可行的: 从用户登录名为'GoDoIt'的用户中选择* 我觉得这很奇怪,因为Eric

使用MariaDB 10.0.36,我有一个带有utf8_turkish_ci排序规则的用户表,其中有一个user_login列,该列存储用户的用户名,该用户名也使用带有唯一索引的utf8_turkish_ci排序规则

我的理解是select语句应该不区分大小写,但对于某些用户名似乎不是这样

例如,我有一个登录名为GoDoIt的用户

此语句不返回任何记录:

从用户登录名为'godoit'的用户中选择*

然而,这是可行的:

从用户登录名为'GoDoIt'的用户中选择*

我觉得这很奇怪,因为Eric的用户名是双向的

选择*FROM user,其中user_login='eric' 选择*FROM user,其中user_login='Eric'


返回相同的结果。那么为什么弦乐中的资本不起作用呢?在将输入用户名发送到数据库之前,我在PHP中使用tolower降低输入用户名,我猜这种方法对某些用户名不起作用。

土耳其无点I和点I是两个独立的字符;这些在utf8_turkish_ci排序中被视为不相等

请参见此处的排序规则图表:

请注意无点I和点I的单独条目


这里的附加背景:

土耳其语无点I和点I是两个独立的字符;这些在utf8_turkish_ci排序中被视为不相等

请参见此处的排序规则图表:

请注意无点I和点I的单独条目


其他背景信息:评论太长。斯宾塞的回答很好

列出相等或不相等的字母和状态,以及它们的顺序。下面是一段摘录,说明无点I’s彼此相等,但被认为比点I’s小:

utf8_turkish_ci   I=ı  Ħ=ħ  i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ  ij=IJ=ij   iz J=j=j́=Ĵ=ĵ  jz
utf8_turkish_ci的其他一些不寻常之处:Ö=ö-被视为O和p之间的字母。Ğ=ç和Ğ=Ğ和Ş=ş的情况类似

注意:utf8mb4和utf8手柄相同

MySQL 6.0在数年前就死在藤蔓上了;关于Ş,排序规则的链接似乎已过时:


评论太长了。斯宾塞的回答很好

列出相等或不相等的字母和状态,以及它们的顺序。下面是一段摘录,说明无点I’s彼此相等,但被认为比点I’s小:

utf8_turkish_ci   I=ı  Ħ=ħ  i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ  ij=IJ=ij   iz J=j=j́=Ĵ=ĵ  jz
utf8_turkish_ci的其他一些不寻常之处:Ö=ö-被视为O和p之间的字母。Ğ=ç和Ğ=Ğ和Ş=ş的情况类似

注意:utf8mb4和utf8手柄相同

MySQL 6.0在数年前就死在藤蔓上了;关于Ş,排序规则的链接似乎已过时:


哦,我的。。。我一直在使用错误的排序规则。哦,天哪。。。我一直在使用错误的排序规则。这与case无关。这与case无关。