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

amo*_*one 5 mysql sql

我有一张如下表:

wordId     |   word      
---------------------------------
1          |   axxe
2          |   test word
3          |   another test word
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM `words` WHERE word LIKE 'ax%'
Run Code Online (Sandbox Code Playgroud)

MySQL找不到任何东西.

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

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

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

SELECT * FROM `words` WHERE word LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)

为什么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
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 0

长话短说:

更新您的 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
Run Code Online (Sandbox Code Playgroud)

插入数据:

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

运行测试查询(有效):

SELECT * FROM `turky` WHERE `word`='axxe' 
Run Code Online (Sandbox Code Playgroud)

结果:

1, '斧头',

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

SELECT * FROM `turky` WHERE word LIKE '%ax%'
Run Code Online (Sandbox Code Playgroud)

结果:

1、'axxe'、
3、'axxxxe'、

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

SELECT * FROM `turky` WHERE word LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)

结果:

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


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

SELECT * FROM `turky` WHERE `word` LIKE 'ax%' 
Run Code Online (Sandbox Code Playgroud)

结果:

1、'axxe'、
3、'axxxxe'、

这适用于 MySQL,使用 PHPMyAdmin。

版本:
MySQL:5.6.35
PHPMyAdmin:4.6.6


当前的土耳其语字母表不包含字母“x”,因此这一事实可能[可能不会]对 SQL 排序过程造成一些模糊的干扰(例如在查找该字符时缺乏语言指导)。

在网上搜索 MySQL 中的土耳其语错误,虽然有六个错误,但似乎没有一个适合您的特定实例。

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


如果您的 MySQL 版本是最新的

(或者至少,比我的新)

那么这个问题似乎是特定于您的设置和数据的,所以我非常怀疑我们能否找到并重现这个问题:-(


更多诊断内容:正如Jacob H
所评论的,看看转换为二进制后是否仍然出现此问题:

SELECT * FROM `turky` WHERE BINARY `word` LIKE CONCAT(BINARY 'ax','%'); 
Run Code Online (Sandbox Code Playgroud)

结果:

1、'axxe'、
3、'axxxxe'、