Выбор без учета регистра MySQL



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



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


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

1240   11  

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 даст другой результат с этим: Где colname COLLATE 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

попробуйте с помощью:

order by lower(column_name) asc;

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

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

Comments

    Ничего не найдено.