Spec-Zone .ru
спецификации, руководства, описания, API

C.5.5.1. Чувствительность к регистру в Поисках строки

Для недвоичных строк (CHAR, VARCHAR, TEXT), поиски строки используют сопоставление операндов сравнения. Для двоичных строк (BINARY, VARBINARY, BLOB), сравнения используют числовые значения байтов в операндах; это означает, что для буквенных символов, сравнения будут чувствительными к регистру.

Сравнение между недвоичной строкой и двоичной строкой обрабатывается как сравнение двоичных строк.

Простые операции сравнения (>=, >, =, <, <=, сортировка, и группировка), основаны на "значении вида каждого символа." Символы с тем же самым значением вида обрабатываются как тот же самый символ. Например, если"e"и"é"имейте то же самое значение вида в данном сопоставлении, они сравниваются как равный.

Набор символов значения по умолчанию и сопоставление latin1 и latin1_swedish_ci, таким образом, сравнения недвоичной строки являются нечувствительными к регистру по умолчанию. Это означает это, если Вы ищете с col_name LIKE 'a%', Вы получаете все значения столбцов, которые запускаются с A или a. Чтобы сделать этот поиск чувствительным к регистру, удостоверьтесь, что у одного из операндов есть чувствительное к регистру или двоичное сопоставление. Например, если Вы сравниваете столбец и строку, которую оба имеют latin1 набор символов, можно использовать COLLATE оператор, чтобы заставить любой операнд иметь latin1_general_cs или latin1_bin сопоставление:

col_name COLLATE latin1_general_cs LIKE 'a%'col_name LIKE 'a%' COLLATE latin1_general_cscol_name COLLATE latin1_bin LIKE 'a%'col_name LIKE 'a%' COLLATE latin1_bin

Если Вы хотите, чтобы столбец всегда был обработан чувствительным к регистру способом, объявите это с чувствительным к регистру или двоичным сопоставлением. См. Раздел 13.1.17,"CREATE TABLE Синтаксис".

Чтобы заставить чувствительное к регистру сравнение недвоичных строк быть нечувствительным к регистру, использовать COLLATE назвать нечувствительное к регистру сопоставление. Строки в следующем примере обычно являются чувствительными к регистру, но COLLATE изменяет сравнение, чтобы быть нечувствительным к регистру:

mysql> SET @s1 = 'MySQL' COLLATE
        latin1_bin,    ->  @s2 = 'mysql' COLLATE
        latin1_bin;mysql> SELECT @s1 = @s2;+-----------+| @s1 = @s2 |+-----------+|         0 |+-----------+mysql> SELECT @s1 COLLATE latin1_swedish_ci = @s2;+-------------------------------------+| @s1 COLLATE latin1_swedish_ci = @s2 |+-------------------------------------+|                                   1 |+-------------------------------------+

Двоичная строка является чувствительной к регистру в сравнениях. Чтобы сравнить строку как нечувствительную к регистру, преобразуйте это в недвоичную строку и использование COLLATE назвать нечувствительное к регистру сопоставление:

mysql> SET @s = BINARY 'MySQL';mysql> SELECT @s = 'mysql';+--------------+| @s = 'mysql' |+--------------+|            0 |+--------------+mysql> SELECT CONVERT(@s USING latin1) COLLATE latin1_swedish_ci = 'mysql';+--------------------------------------------------------------+| CONVERT(@s USING latin1) COLLATE latin1_swedish_ci = 'mysql' |+--------------------------------------------------------------+|                                                            1 |+--------------------------------------------------------------+

Чтобы определить, сравнится ли значение как недвоичная или двоичная строка, используйте COLLATION() функция. Этот пример показывает это VERSION() возвращает строку, у которой есть нечувствительное к регистру сопоставление, таким образом, сравнения являются нечувствительными к регистру:

mysql> SELECT COLLATION(VERSION());+----------------------+| COLLATION(VERSION()) |+----------------------+| utf8_general_ci      |+----------------------+

Для двоичных строк значение сопоставления binary, таким образом, сравнения будут чувствительными к регистру. Один контекст, в котором Вы будете видеть binary для сжатия и функций шифрования, которые возвращают двоичные строки как правило: строка:

mysql> SELECT COLLATION(ENCRYPT('x')),
        COLLATION(SHA1('x'));+-------------------------+----------------------+| COLLATION(ENCRYPT('x')) | COLLATION(SHA1('x')) |+-------------------------+----------------------+| binary                  | binary               |+-------------------------+----------------------+

Проверять значение вида строки, WEIGHT_STRING() может быть полезным. См. Раздел 12.5, "Строковые функции".