Проблема в обеспечении чувствительности к регистру в MySQL - PullRequest
0 голосов
/ 31 октября 2018

Мне известно, что MySQL по умолчанию не учитывает регистр. Я также читал об использовании параметров сортировки utf8_general_cs для включения чувствительности к регистру. Но я получаю сообщение о том, что сопоставление не определено. Также, когда я запрашиваю сопоставление для charset utf8, в наборе результатов отображаются только сопоставления ci. Итак, вопрос № 1: нужно ли настраивать сопоставления, связанные с cs? Если так, то я хотел бы получить некоторые рекомендации по этому вопросу. Или это зависит от конкретного движка базы данных?

Также я читал об использовании сортировки utf8_bin для обеспечения чувствительности поиска в запросах MySQL. Я так и сделал. Установите параметры сортировки схемы как utf8_bin. Но это не сработало. Перезапустил службы MySQL, чтобы убедиться, что параметры сортировки обновлены. Но все же, когда я делаю

 Select * from table where name like 'el%';

Он также дает имя, начинающееся с 'EL'.

Примечание. Я предпочтительно ищу варианты настройки параметров сортировки на уровне базы данных. Сервер MySQL версии 5.6.x

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Параметры сортировки столбцов имеют приоритет над параметрами базы данных и таблицами. Если вы вносили изменения, возможно, ваш столбец в настоящее время использует значение, которое было значением по умолчанию при создании таблицы. Вы должны быть в состоянии определить его с помощью правильного инструмента SQL или запустив:

SELECT table_schema, column_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'your database name'
AND table_name = 'your table name'

Если вы не хотите изменять параметры сортировки столбцов, вы можете установить их на уровне выражения:

SELECT *
FROM foo
WHERE bar LIKE 'el%' COLLATE utf8mb4_0900_as_cs;

(демонстрационном)

Сортировка влияет на сортировку и сравнение символов, поэтому вам придется прочитать некоторые документы , чтобы выяснить, какой из них лучше всего соответствует вашим потребностям (это не так просто, если вы не фанат Unicode).

Все мои проекты на испанском, поэтому я часто использую utf8mb4_spanish_ci; -)

0 голосов
/ 31 октября 2018

Я думал, что нормально работает ?! В любом случае, если это локализованная проблема, есть несколько решений: В первую очередь можно использовать регулярное выражение SELECT * FROM users WHERE name REGEXP '^[E][P]*$'. Альтернатива Конечно, вы должны обращаться к этому через оболочку других языков для автоматизации или обработки, а не для консоли MySQL, верно? Я бы предложил отсортировать его по языку, который вы используете для оболочки, это легко реализовать. Однако, тем не менее, имейте в виду только те, которые начинаются с el, так как это уменьшит количество проверяемых вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...