it-swarm.com.ru

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

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

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

Где на самом деле, реальное значение Value является dicksavagewood.

204
NoodleOfDeath

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

437
Marc B

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

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

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

102
Colin Hebert

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

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

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

= 1

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

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

или же

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

= 0

48
Someone

Сравнения нечувствительны к регистру когда столбец использует параметры сортировки, оканчивающиеся на _ci (например, defaultlatin1_general_ci), и они чувствительны к регистру когда столбец использует параметры сортировки, оканчивающиеся на _cs или _bin (например, сопоставления utf8_unicode_cs и utf8_bin). 

Проверьте сопоставление

Вы можете проверить параметры сортировки server, database и connection, используя:

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

и вы можете проверить параметры сортировки table, используя:

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;

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

27
ostrokach

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

WHERE `colname` = 'keyword'

или же

WHERE `colname` = 'KeyWord'

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

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

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

Этот SQL даст другой результат с этим: ГДЕ colname COLLATE latin1_general_cs = 'ключевое слово'

latin1_general_cs - это обычная сортировка или сортировка по умолчанию в большинстве баз данных.

25
Ifan Iqbal

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

16
chuck taylor

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

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

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

9
Ken Johnson

Выбор SQL не чувствителен к регистру.

Эта ссылка может показать вам, как сделать с учетом регистра: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make- my-sql-query-case-чувствительный.html

4
Jacob Nelson

Попробуйте с: 

order by lower(column_name) asc;
2
VS-java

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

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

"SELECT * from mytable" 

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

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

2
Wes Grant

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

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