Spec-Zone .ru
спецификации, руководства, описания, API
|
Для недвоичных строк (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, "Строковые функции".