Нечувствительность к регистру MySQL

Может кто-нибудь сказать мне, если запрос MySQL SELECT чувствителен к регистру или нечувствительным к регистру по умолчанию? И если нет, то какой запрос мне нужно отправить, чтобы я мог сделать что-то вроде:

SELECT * FROM 'table' WHERE 'Value' = "iaresavage"

Где в действительности, реальная ценность Value - это IAreSavage.

Ответ 2

Вы можете в нижнем регистре значение и переданный параметр:

SELECT * FROM 'table' WHERE LOWER('Value') = LOWER("IAreSavage")

Другой (лучший) способ - использовать оператор COLLATE как сказано в документации.

Ответ 3

ИСПОЛЬЗОВАТЬ BINARY

Это простой выбор

SELECT * FROM myTable WHERE 'something' = 'Something'

= 1

Это выбор с двоичным

SELECT * FROM myTable WHERE BINARY 'something' = 'Something'

или

SELECT * FROM myTable WHERE 'something' = BINARY 'Something'

= 0

Ответ 4

Сравнение нечувствительно к регистру, когда столбец использует сортировку, которая заканчивается на _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;

Теперь ваши сравнения должны быть чувствительны к регистру.

Ответ 5

Сравнение строк в фразе WHERE не чувствительно к регистру. Вы можете попробовать сравнить с помощью

WHERE `colname` = 'keyword'

или

WHERE `colname` = 'keyword'

и вы получите тот же результат. Это поведение MySQL по умолчанию.

Если вы хотите, чтобы сравнение было чувствительным к регистру, вы можете добавить COLLATE примерно так:

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

Этот SQL дал бы другой результат с этим:   WHERE colname COLLATE latin1_general_cs = 'keyword'

latin1_general_cs является общей или стандартной настройкой в ​​большинстве баз данных.

Ответ 6

Выбранная вами сортировка устанавливает, чувствительны ли вы к регистру или нет.

Ответ 7

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

Ниже приведена таблица script. Обратите внимание на нижнюю часть: "COLLATE latin1_general_cs". Это cs в конце означает чувствительность к регистру. Если вы хотите стол будет нечувствительным к регистру, вы либо оставите это частично или используйте "COLLATE 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;

Если ваш проект таков, что вы можете создать свой собственный стол, тогда имеет смысл указать ваш предпочтение чувствительности к регистру при создании таблицы.

Ответ 9

Попробуйте:

order by lower(column_name) asc;

Ответ 10

Обратите внимание также, что имена таблиц чувствительны к регистру в Linux, если вы не установите директиву lower_case_table_name config 1. Это связано с тем, что таблицы представлены файлами, чувствительными к регистру в Linux.

Особенно остерегайтесь разработки в Windows, которая не чувствительна к регистру и не развертывается на производстве там, где она есть. Например:

"SELECT * from mytable" 

против таблицы myTable удастся в Windows, но не работает в Linux, если не указано вышеописанная директива.

Ссылка здесь: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Ответ 11

Можешь попробовать. надеюсь, это будет полезно.

SELECT * FROM 'table' WHERE 'Value' COLLATE latin1_general_cs = "IAreSavage"

Ответ 12

Строковые поля с установленным двоичным флагом всегда будут чувствительны к регистру. Если вам нужен регистрозависимый поиск для недвоичного текстового поля, используйте это: ВЫБЕРИТЕ "test" REGEXP BINARY "TEST" КАК РЕЗУЛЬТАТ;