Подтвердить что ты не робот

Выбор всех строк из базы данных, которая начинается с буквы в нижнем регистре

Я пытаюсь выбрать все строки в моей базе данных, которые начинаются с строчной буквы с регулярным выражением, но по какой-то причине он выбирает все строки, которые начинаются с прописной буквы. Что я делаю неправильно?

SELECT * 
FROM  `allData` 
WHERE response REGEXP  '^[a-z]'
LIMIT 0 , 30
4b9b3361

Ответ 1

Из руководства MySQL REGEXP:

REGEXP не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.

Возможно, вам удастся использовать двоичную строку:

WHERE response REGEXP BINARY '^[a-z]'

Разумная глупая скрипка для демонстрации: http://sqlfiddle.com/#!9/7eade/3

РЕДАКТИРОВАТЬ: Как говорит Рэй в комментариях, вы, вероятно, должны использовать [[:lower:]] вместо того, чтобы работать во всех сортировках, например.

WHERE response REGEXP BINARY '^[[:lower:]]'

Ответ 2

Я бы использовал имя класса символов mysql для совпадения с REGEXP BINARY:

  WHERE response REGEXP BINARY  '^[[:lower:]]'

Я не знаю, имеет ли смысл [a-z] в каждом наборе символов и сортировке, где, поскольку имя класса символов [:lower:] всегда будет соответствовать всем строчным альфа-символам.

Ответ 4

select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''