#mysql #sql
#mysql #sql
Вопрос:
SELECT *
FROM County
WHERE LOWER(Name) LIKE "%u%";
Я пытаюсь возвращать только строки, в которых названия округов содержат строчную букву «u» где-то в его названии. По какой-то причине с приведенным выше запросом я возвращаю несколько строк, где имя содержит только заглавную букву «U», что не то, что я хочу. Я не понимаю…
Заранее спасибо!
Комментарии:
1. Вероятно, потому, что у вас в этом столбце сопоставление без учета регистра
2. Начните SQL-вопрос, показав схему для всех соответствующих таблиц. Пример данных, содержащихся в этих таблицах, также очень полезен. Если это вообще возможно, создайте SQLFiddle с определенной схемой и предоставленными некоторыми тестовыми данными
3. Это может быть связано с тем, что вы используете
LOWER
только во время фильтрации (т. Е.USA
Будет рассматриваться какusa
иLouisiana
будет рассматриваться какlouisiana
). Однако в операторе select он будет печатать имя как есть (т. Е. США, Луизиана …). Теперь вам может быть интересно, как фильтруется USA.4. @Henry Ecker: Спасибо за редактирование исходного вопроса. nostrad0muz, пожалуйста, не искажайте свой запрос. Если вы хотите пометить его как решаемый, примите один из ответов, нажав галочку / галочку рядом с ответом.
Ответ №1:
Попробуйте :
SELECT *
FROM County
WHERE
BINARY name like '%u%' ;
Демонстрация: https://dbfiddle.uk/?rdbms=mysql_8.0amp;fiddle=44048a2d080036ce9905340d6ebbf3e3
CREATE TABLE County (
Name varchar(30 )
);
insert into County values
('Test1'),
('Test2'),
('Tust3'),
('TeAt4'),
('TeAt5'),
('TUst6'),
('Tust7');
Результат:
Name Tust3 Tust7
Ответ №2:
mysql> show variables like '%character%';
-------------------------- ---------------------------------------------------------
| Variable_name | Value |
-------------------------- ---------------------------------------------------------
| character_set_client | cp850 |
| character_set_connection | cp850 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | cp850 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | C:Program FilesMySQLMySQL Server 8.0sharecharsets |
-------------------------- ---------------------------------------------------------
8 rows in set (0.00 sec)
Поскольку мой character_set_client есть cp850
, я могу использовать соответствующую последовательность сортировки latin1_general_cs
. Более подробная информация об этом сопоставлении последовательностей, если она найдена в документации
SELECT *
FROM County
WHERE Name COLLATE latin1_general_cs LIKE "%u%"
Приведенный выше запрос должен найти все записи с маленькой буквы u
.
Последовательность сопоставления latin1_bin
также работает (как указано в других ответах):
SELECT *
FROM County
WHERE Name COLLATE latin1_bin LIKE "%u%"