Случае MySQL бесчувственный выбрать

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

SELECT * FROM `table` WHERE `Value` = "DickSavagewood"

где в действительности, реальное значение Value и dicksavagewood.

11 ответов


они нечувствительны к регистру, если вы не делаете двоичное сравнение.


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

SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("DickSavagewood")

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


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

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

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

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


SQL Select не учитывает регистр.

эта ссылка может показать вам, как сделать регистр чувствительным: http://sqlserver2000.databases.aspfaq.com/how-can-i-make-my-sql-queries-case-sensitive.html


Отметим также, что имена таблиц чувствительны к регистру в 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


попробовать с:

order by lower(column_name) asc;

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

SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "DickSavagewood"