我有一张如下表:
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
答案 0 :(得分: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
插入数据:
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,其中包含一些土耳其语言错误。
(或者至少比我的更近)
然后问题似乎与您的设置和数据有关,因此我非常怀疑我们是否可以找到并重现此问题:-(
更多诊断资料:
正如Jacob H所评论的那样,看看在转换为二进制之后是否仍会出现此问题:
SELECT * FROM `turky` WHERE BINARY `word` LIKE CONCAT(BINARY 'ax','%');
结果:
1,&#39; axxe&#39;,
3,&#39; axxxxxe&#39;,