我有一张如下表:
Run Code Online (Sandbox Code Playgroud)wordId | word --------------------------------- 1 | axxe 2 | test word 3 | another test word
我正在尝试运行下面的查询来查找以字母"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)
更新您的 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,其中包含一些土耳其语言错误。
(或者至少,比我的新)
那么这个问题似乎是特定于您的设置和数据的,所以我非常怀疑我们能否找到并重现这个问题:-(
更多诊断内容:正如Jacob H
所评论的,看看转换为二进制后是否仍然出现此问题:
SELECT * FROM `turky` WHERE BINARY `word` LIKE CONCAT(BINARY 'ax','%');
Run Code Online (Sandbox Code Playgroud)
结果:
1、'axxe'、
3、'axxxxe'、
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |