关于utf8_turkish_ci整理的MySql LIKE运算符有什么问题?

时间:2017-05-09 18:33:56

标签: mysql sql

我有一张如下表:

wordId     |   word      
---------------------------------
1          |   axxe
2          |   test word
3          |   another test word

我正在尝试运行下面的查询来查找以字母“ax”开头的记录。

SELECT * FROM `words` WHERE word LIKE 'ax%'

MySQL找不到任何东西。

但是,如果我尝试下面的一个查询,我可以在结果上看到正确的记录(单词“axxe”)。

SELECT * FROM `words` WHERE word='axxe'

SELECT * FROM `words` WHERE word LIKE '%ax%'

SELECT * FROM `words` WHERE word LIKE 'a%'

为什么MySQL找不到第一个查询的正确值?我试图在命令行和phpMyAdmin上运行它,但结果是一样的。

这是SHOW CREATE TABLE输出:

CREATE TABLE `words` (
 `wordId` int(11) NOT NULL auto_increment,
 `word` text collate utf8_turkish_ci NOT NULL
 PRIMARY KEY  (`word`)
) ENGINE=MyISAM AUTO_INCREMENT=2853 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci

1 个答案:

答案 0 :(得分:0)

TL; DR:

  

更新您的MySQL版本。

我在这里创建了一个问题模拟:

创建表格:

CREATE TABLE `turky` (
 `id` int(5) NOT NULL AUTO_INCREMENT,
 `word` text COLLATE utf8_turkish_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci

插入数据:

INSERT INTO `turky` (`id`, `word`) VALUES
(1, 'axxe'),
(2, 'test word'),
(3, 'axxxxxe'),
(4, 'another test word');

运行测试查询(有效):

SELECT * FROM `turky` WHERE `word`='axxe' 

结果:

  

1,' axxe',

运行测试查询2(有效):

SELECT * FROM `turky` WHERE word LIKE '%ax%'

结果:

  

1,' axxe',
    3,' axxxxxe',

运行测试查询3(可行):

SELECT * FROM `turky` WHERE word LIKE 'a%'

结果:

  

1,' axxe',
     3,' axxxxxe',
     4,'另一个测试词';

运行测试查询4(最初不起作用):

SELECT * FROM `turky` WHERE `word` LIKE 'ax%' 

结果:

  

1,' axxe',
    3,' axxxxxe',

这适用于MySQL,使用PHPMyAdmin。

<强>版本
MySQL:5.6.35
PHPMyAdmin:4.6.6

目前的土耳其语字母并不包含字母&#34; x&#34;所以这个事实可能[可能不会]对SQL排序过程造成一些模糊的干扰(就像在寻找这个角色时缺乏语言指导一样)。

网络搜索MySQL中的土耳其语错误,虽然其中有六个似乎没有针对您的特定实例。

但是,我可以从我自己的测试中看到的唯一选项(上图),使用您给我们的表和SQL详细信息,是您有一个旧版本的MySQL,其中包含一些土耳其语言错误。

如果你的MySQL版本是最新的

(或者至少比我的更近)

然后问题似乎与您的设置和数据有关,因此我非常怀疑我们是否可以找到并重现此问题:-(

更多诊断资料
正如Jacob H所评论的那样,看看在转换为二进制之后是否仍会出现此问题:

SELECT * FROM `turky` WHERE BINARY `word` LIKE CONCAT(BINARY 'ax','%'); 

结果:

  

1,&#39; axxe&#39;,
    3,&#39; axxxxxe&#39;,