Сравнение строк с учетом регистра в SQL (MariaDB, MySQL) - PullRequest
0 голосов
/ 21 апреля 2020

Я прочитал много вопросов и ответов на StackOverflow (опубликовано лет go), касающихся этой проблемы, но ни один из найденных мной не работал с использованием сервера 10.3.22-MariaDB и lib mysql - 5.6.43 в качестве клиента базы данных.

Я пытаюсь сделать следующее: SELECT * FROM table WHERE 'column' = 'data' LIMIT 1
Приведенная выше команда выберет обе строки, если значение column - это DaTa или data, и я стараюсь go только для последнего.

Ответы на аналогичные вопросы 2011 года (MySQL) предполагают:

SELECT * FROM table WHERE BINARY 'column' = 'data'
SELECT * FROM table WHERE 'column' = BINARY 'data'
SELECT * FROM table WHERE 'column' LIKE BINARY 'data'
SELECT * FROM table WHERE 'column' LIKE 'data' COLLATE latin1_general_cs

Ни одна из команд выше не учитывала регистр букв. Более того, последний даже не запустился из-за

  1. нераспознанного ключевого слова. (около "COLLATE" в позиции 45)
  2. Неожиданный токен. (возле «latin1_general_cs» в позиции 53)

Каково решение этой проблемы в 2020 году? Что я делаю не так или что не так с моим сервером?
Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Это работает без одинарных кавычек вокруг cloumn

SELECT * FROM table1 WHERE `column` LIKE 'data' COLLATE latin1_general_ci;

Когда вы спросили, что сопоставление должно соответствовать символьному набору, так что если вам нравится я utf8mb5, вы пишете:

SELECT * FROM table1 WHERE `column` LIKE _latin1 'data'   COLLATE latin1_general_ci;
1 голос
/ 21 апреля 2020

Это должно работать:

WHERE BINARY column = 'data'

Однако, это не будет работать, если вы поставите column в одинарные кавычки. Это будет строка, а не ссылка на столбец.

...