Может кто-нибудь сказать мне, если SELECT
запрос MySQL чувствителен к регистру или регистронезависимый по умолчанию? И если нет, то какой запрос я должен отправить, чтобы я мог сделать что-то вроде:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Где в действительности, реальная ценность Value
есть IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Ответы:
Они нечувствительны к регистру , если вы не делаете двоичное сравнение .
источник
Вы можете в нижнем регистре значение и переданный параметр:
Другой (лучший) способ - использовать
COLLATE
оператора, как сказано в документации.источник
SELECT
утверждение выгляделоCOLLATE
тогда?LOWER()
или произвольноеCOLLATE
предложение, может полностью обойти индекс, и со временем, по мере роста вашей таблицы, это может иметь радикальные последствия для производительности. Вероятно, это имена пользователей, которые вы ищете? Используйте сортировку без учета регистра и добавьте уникальный индекс в столбец. Используйте,EXPLAIN
чтобы подтвердить, что индекс используется.ИСПОЛЬЗОВАТЬ BINARY
Это простой выбор
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Это выбор с двоичным
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
или
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
источник
Сравнения нечувствительны к регистру, когда столбец использует параметры сортировки, которые заканчиваются на
_ci
(например, параметрыlatin1_general_ci
сортировки по умолчанию ), и они чувствительны к регистру, когда столбец использует параметры сортировки, которые заканчиваются на_cs
или_bin
(такие какutf8_unicode_cs
иutf8_bin
сортировки).Проверьте сопоставление
Вы можете проверить параметры сортировки вашего сервера , базы данных и соединений, используя:
и вы можете проверить свою таблицу сортировки с помощью:
Изменить параметры сортировки
Вы можете изменить параметры сортировки базы данных, таблицы или столбца на следующие с учетом регистра:
Ваши сравнения должны теперь быть чувствительными к регистру.
источник
Сравнение строк в фразе WHERE не чувствительно к регистру. Вы можете попробовать сравнить, используя
или
и вы получите же результат . Это поведение по умолчанию MySQL.
Если вы хотите, чтобы сравнение было чувствительным к регистру , вы можете добавить
COLLATE
вот так:Этот SQL даст другой результат с этим: ГДЕ
colname
COLLATE latin1_general_cs = 'ключевое слово'latin1_general_cs
в большинстве баз данных является обычной или стандартной сортировкой.источник
Выбранная вами сортировка устанавливает, чувствительны ли вы к регистру или нет.
источник
По умолчанию регистр не учитывается, но следующая самая важная вещь, на которую вы должны обратить внимание, это то, как таблица была создана в первую очередь, потому что вы можете указать чувствительность к регистру при ее создании.
Сценарий ниже создает таблицу. Обратите внимание, внизу написано «COLLATE latin1_general_cs». Это cs в конце означает регистр символов. Если вы хотите, чтобы ваша таблица не учитывала регистр символов, вы должны либо пропустить эту часть, либо использовать «COLLATE latin1_general_ci».
Если ваш проект таков, что вы можете создать свою собственную таблицу, то имеет смысл указать ваши предпочтения с учетом регистра при создании таблицы.
источник
Выбор SQL не чувствителен к регистру.
Эта ссылка может показать вам, как сделать с учетом регистра: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- SQL-запросы регистра-sensitive.html
источник
Попробуйте с:
источник
Также обратите внимание, что имена таблиц чувствительны к регистру в Linux, если вы не установили
lower_case_table_name
директиву config в 1 . Это потому, что таблицы представлены файлами, которые чувствительны к регистру в Linux.Особенно остерегайтесь разработки под Windows, которая не чувствительна к регистру и развертывается на производстве, где она есть. Например:
против таблицы myTable будет успешным в Windows, но не будет работать в Linux, опять же, если не установлена вышеупомянутая директива.
Ссылка здесь: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
источник
lower_case_table_name
как указано в ответе, под которым мы комментируемВ настоящее время принятое решение является в основном правильным.
Если вы используете недвоичную строку (CHAR, VARCHAR, TEXT), сравнения не чувствительны к регистру в соответствии с параметрами сортировки по умолчанию.
Если вы используете двоичную строку (BINARY, VARBINARY, BLOB), сравнения выполняются с учетом регистра, поэтому вам нужно использовать,
LOWER
как описано в других ответах.Если вы не используете параметры сортировки по умолчанию и используете небинарную строку, чувствительность к регистру определяется выбранным параметром сортировки.
Источник: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Читайте внимательно. Некоторые ошибочно считают, что сравнения обязательно чувствительны к регистру или нечувствительны. Это не вариант.
источник
Можешь попробовать. надеюсь это будет полезно.
источник
Строковые поля с установленным двоичным флагом всегда будут чувствительны к регистру. Если вам нужен регистрозависимый поиск для недвоичного текстового поля, используйте это: SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;
источник