【问题标题】:Why is collation affecting LIKE matching even with no national characters involved?为什么即使不涉及国家字符,排序规则也会影响 LIKE 匹配?
【发布时间】:2017-07-12 14:20:49
【问题描述】:

问题:用户输入%%搜索连续包含两个百分号的文本。应用程序将其转换为条件... LIKE '%\\%\\%%'。数据库返回错误的结果。

我设法将问题缩小到整理范围。在多个 MySQL 和 MariaDB 版本上进行了测试,下面的两个查询评估不同。我试图阅读 LIKE 运算符和排序规则,但找不到任何可以解释差异的内容。

SELECT '%' COLLATE utf8_czech_ci LIKE '%\\%\\%%';

结果:TRUE

SELECT '%' COLLATE utf8_general_ci LIKE '%\\%\\%%';

结果:FALSE

【问题讨论】:

标签: mysql collation


【解决方案1】:

两种排序规则都包含不同的字符集(utf8_czech_ci / utf8_general_ci):

A=a=ª=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą  Aa  ae  az  Æ=æ  B=b  C=c=Ç=ç  cz  Č=č
D=d=Ď=ď  dz  Ð=ð  E=e=È=É=É=Ê=Ë=è=é=é=ê=ë=Ē=ē=Ĕ=ĕ=Ė=ė=Ę=ę=Ě=ě  F=f  fz  ƒ
G=g=ğ=Ģ=ģ  H=h  hz  ch  I=i=Ì=Í=Í=Î=Ï=ì=í=í=î=ï=Ī=ī=Į=į=İ  ij=ij  iz  ı  J=j  K=k=Ķ=ķ
L=l=Ļ=ļ  lj=LJ=Lj=lj  ll  lz  Ł=ł  M=m  N=n=Ñ=ñ=Ń=ń=Ņ=ņ=Ň=ň  nz
O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö  oe=Œ=œ  oz  Ø=ø  P=p  Q=q  R=r  Ř=ř  S=s=ş  sh  ss=ß  sz
Š=Š=š=š  T=t=Ť=ť  TM=tm=™  tz  U=u=Ù=Ú=Ú=Û=Ü=ù=ú=ú=û=ü=Ū=ū=Ů=ů=Ų=ų  ue  uz  V=v  W=w
X=x  Y=y=Ý=Ý=ý=ý=ÿ=Ÿ  yz  Z=z  zh  zz  Ž=Ž=ž=ž  Þ=þ  µ

A=a=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą  Aa  ae  az  B=b  C=c=Ç=ç=Č=č  ch  cz
D=d=Ď=ď  dz  E=e=È=É=É=Ê=Ë=è=é=é=ê=ë=Ē=ē=Ĕ=ĕ=Ė=ė=Ę=ę=Ě=ě  F=f  fz  G=g=ğ=Ģ=ģ  H=h
hz  I=i=Ì=Í=Í=Î=Ï=ì=í=í=î=ï=Ī=ī=Į=į=İ=ı  ij  iz  J=j  K=k=Ķ=ķ  L=l=Ļ=ļ  lj  ll  lz  M=m
N=n=Ñ=ñ=Ń=ń=Ņ=ņ=Ň=ň  nz  O=o=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö  oe  oz  P=p  Q=q  R=r=Ř=ř
S=s=ß=ş=Š=Š=š=š  sh  ss  sz  T=t=Ť=ť  TM=tm  tz  U=u=Ù=Ú=Ú=Û=Ü=ù=ú=ú=û=ü=Ū=ū=Ů=ů=Ų=ų
ue  uz  V=v  W=w  X=x  Y=y=Ý=Ý=ý=ý=ÿ=Ÿ  yz  Z=z=Ž=Ž=ž=ž  zh  zz
Æ=æ  Ð=ð  ×  Ø=ø  Þ=þ  ÷  ij  Ł=ł  Œ=œ  ƒ  LJ=Lj=lj

【讨论】:

  • 正如我在回复您的评论时提到的,为什么这会影响百分号?
【解决方案2】:

看起来这只是一个旧错误。我发现了至少两份已确认的报告(https://bugs.mysql.com/bug.php?id=81990https://bugs.mysql.com/bug.php?id=63829) 的类似问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2013-11-24
    • 2020-12-03
    相关资源
    最近更新 更多