【发布时间】:2017-10-08 05:08:57
【问题描述】:
我有一张如下表:
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
【问题讨论】:
-
我猜你的 'words.word' 列有前面的值(非显示字符,如制表符或空格或回车。
SELECT * FROM words WHERE trim(word) LIKE 'ax%'是否给你 wordid 1?如果是这样你有前导空格如果不是您在 ax 中的 a 之前的 word 中有非显示字符。因为 %ax% 有效,这是一个合理的假设。 -
您能从实际表格中复制粘贴这四个单词吗?如果
axxe恰好是аххе(看起来一样,但它是西里尔文)MySql 将无法找到它。 -
相同的会话/窗口?一个窗口使用不同的连接且未提交,另一个未提交但在同一连接上,因此事务仍然打开;因此一个工作另一个不?我抓紧,因为它应该工作;所以这只是我开始考虑的奇怪的东西。
-
也许是
where word like ('ax%' COLLATE utf8_turkish_ci)?基于:stackoverflow.com/questions/25428529/…,因为表列字是在 utf8_turkish_ci @RocketHazmat 中定义的,您能否将您的小提琴更新为土耳其排序规则并尝试看看我们是否可以重现?