Выбор без учета регистра MySQL
может ли кто-нибудь сказать мне, если a SELECT команда MySQL по умолчанию нечувствительна к регистру? А если нет, то какую команду мне нужно отправить, чтобы я мог сделать что-то вроде:
SELECT * FROM `table` WHERE `Value` = "DickSavagewood"
где на самом деле, реальное значение Value и dicksavagewood.
11 ответов:
они нечувствительны к регистру, если вы не делаете двоичное сравнение.
вы можете в нижнем регистре значение и переданный параметр:
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("DickSavagewood")другой (лучший) способ было бы использовать
COLLATEоператор, как сказал документации
ИСПОЛЬЗОВАТЬ ДВОИЧНЫЙ
Это простой выбор
SELECT * FROM myTable WHERE 'something' = 'Something'= 1
это выбор с двоичным
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'или
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'= 0
сравнение строк, где фраза не чувствительна к регистру. Вы можете попробовать сравнить с помощью
WHERE `colname` = 'keyword'или
WHERE `colname` = 'KeyWord'и вы получите тот же результат. Это поведение по умолчанию MySQL.
если вы хотите, чтобы сравнение было регистр, вы могли бы добавить
COLLATEвот так:WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'что SQL даст другой результат с этим: Где
colnameCOLLATE latin1_general_cs = 'ключевое слово'
latin1_general_csобщий или сортировки по умолчанию в большинстве баз данных.
сравнения регистр когда столбец использует параметры сортировки, которые заканчиваются на
_ci(например,по умолчаниюlatin1_general_ciпараметры сортировки) и они регистр когда столбец использует параметры сортировки, которые заканчиваются на_csили_bin(например,utf8_unicode_csиutf8_binпараметры сортировки).проверить параметры сортировки
вы можете проверить свой сервер,база данных и подключение параметры сортировки с помощью:
mysql> show variables like '%collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+и вы можете проверить свой стол параметры сортировки с использованием:
mysql> SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_name = `mytable`; +----------------------+------------+-------------------+ | table_schema | table_name | table_collation | +----------------------+------------+-------------------+ | myschema | mytable | latin1_swedish_ci |изменить параметры сортировки
вы можете изменить параметры сортировки базы данных, таблицы или столбца на что-то чувствительное к регистру следующим образом:
-- Change database collation ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- or change table collation ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; -- or change column collation ALTER TABLE `table` CHANGE `Value` `Value` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;ваши сравнения теперь должны быть чувствительны к регистру.
по умолчанию регистр не учитывается, но следующая самая важная вещь вы должны взглянуть на то, как была создана таблица в первую очередь потому, что можно указать случай чувствительность при создании таблицы.
скрипт создает таблицу. Обратите внимание, внизу написано "COLLATE latin1_general_cs". Этот cs в конце означает, что регистр чувствителен. Если вы хотели таблицы без учета регистра можно либо оставить часть или использовать "разобрать по копиям latin1_general_ci".
CREATE Table PEOPLE ( USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, FIRST_NAME VARCHAR(50) NOT NULL, LAST_NAME VARCHAR(50) NOT NULL, PRIMARY KEY (USER_ID) ) ENGINE=MyISAM DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs AUTO_INCREMENT=0;Если ваш проект таким образом, что вы можете создать свой своя таблица, тогда имеет смысл указать свою настройка чувствительности к регистру при создании таблицы.
SQL Select не учитывает регистр.
эта ссылка может показать вам, как сделать чувствительным к регистру:http://sqlserver2000.databases.aspfaq.com/how-can-i-make-my-sql-queries-case-sensitive.html
Отметим также, что имена таблиц чувствительны к регистру в Linux, если вы выберите
lower_case_table_nameдиректива config to 1. Это связано с тем, что таблицы представлены файлами, чувствительными к регистру в Linux.особенно остерегайтесь разработки в Windows, которая не чувствительна к регистру и развертывается в производство, где она есть. Например:
"SELECT * from mytable"против таблицы myTable будет успешным в Windows, но не в Linux, опять же, если вышеупомянутая директива заданный.
Ссылка здесь:http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
вы можете попробовать его. надеюсь, что это будет полезно.
SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "DickSavagewood"
Comments