我正在尝试选择数据库中所有字符串,这些字符串以带有regexp的小写字母开头,但由于某种原因,它选择了所有以大写字母开头的字符串。我做错了什么?
SELECT *
FROM `allData`
WHERE response REGEXP '^[a-z]'
LIMIT 0 , 30
答案 0 :(得分:11)
REGEXP不区分大小写,除非与二进制字符串一起使用。
因此,可能在使用二进制字符串时会有一些运气:
WHERE response REGEXP BINARY '^[a-z]'
示范的合理愚蠢小提琴:http://sqlfiddle.com/#!9/7eade/3
编辑:正如Ray在评论中所说,您应该使用[[:lower:]]
来代替所有排序规则,例如。
WHERE response REGEXP BINARY '^[[:lower:]]'
答案 1 :(得分:2)
我会使用mysql的Character Class Name与REGEXP BINARY
匹配:
WHERE response REGEXP BINARY '^[[:lower:]]'
我不知道[a-z]
在每个字符集和整理中是否有意义,因为字符类名[:lower:]
将始终匹配所有小写字母字符。
答案 2 :(得分:1)
SELECT *
FROM allData
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1)
LIMIT 0 , 30
...但是,这可能会受到MySQL character collation
的限制答案 3 :(得分:0)
select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''