Поиск

Операции, на которые влияет поддержка наборов символов

В этом разделе описаны операции, которые принимают во внимание информацию о наборах символов, начиная с версии MySQL 4.1.

Результирующие строки
В MySQL предусмотрено множество операций и функций, которые возвращают строки. Этот раздел отвечает на вопрос: каковы наборы символов и порядки сопоставления для этих строк?
Для простых функций, которые принимают аргумент-строку и возвращают строку, выходной набор символов и порядок сопоставления - те же самые, что и у входного значения. Например, UPPER (X) возвращает строку, набор символов и порядок сопоставления которой те же, что и у X. То же касается функций INSTRO, LCASEO, LOWER(), LTRIMO, MID(), REPEAT(), REPLACE(), REVERSE!), RIGHTO, RPAD(), RTRIM(), SOUNDEX(), SUBSTRING(), TRIMO, UCASE() и UPPER(). (Также следует отметить, что функция REPLACE(), в отличие от прочих, игнорирует порядок сопоставления входных строк и всякий раз выполняет не зависящее от регистра сравнение.)
Для операций, которые комбинируют множество входных строк и возвращают единственную выходную строку, применяются "агрегатные правила" стандарта SQL:

  1. Если указано явно COLLATION X, использовать X.
  2. Если указано явно COLLATION X и COLLATION У, генерировать ошибку.
  3. Иначе, если все порядки сопоставления X, использовать X.
  4. Иначе результат не имеет порядка сопоставления.

Например, ДЛЯ CASE. . .WHEN a THEN b WHEN b THEN с COLLATE X END, результирующим порядком сопоставления будет X. То же относится к CASE, UNION, | |, CONCATO, ELT (), GREATEST О , IF() HLEAST().
Для операций, которые выполняют преобразование к символьным данным, набор символов и порядок сопоставления результирующих строк определяются системными переменными character_set_connection и collation_connection. Это касается функций CAST(),CHAR(),CONV(), FORMAT (), HEX() И SPACE ().

CONVERT()
CONVERT () представляет способ преобразования данных между различными символьными наборами. Синтаксис выглядит следующим образом: CONVERT(выражение USING имя_ кодировки)
В MySQL имена кодировок трансляции такие же, как соответствующие имена символьных наборов. Примеры:
SELECT CONVERT(_latinl'Muller' USING utf 8);
INSERT INTO utf8table (utf8column)
SELECT CONVERT(latinlfield USING utf8) FROM latinltable;
CONVERT(.. .USING...) реализована в соответствии со спецификациями стандарта SQL.

CAST()
Для преобразования строки в другой символьный набор можно также использовать функцию CAST (), синтаксис которой показан ниже:
CAST {символьная_строка AS символьный_тип_данных CHARACTER SET имя_набора_символов)
Пример:
SELECT CAST(_latinl'test1 AS CHAR CHARACTER SET utf8);
Если вы используете CAST() без CHARACTER SET, результирующий набор символов и порядок сопоставления определяются системными переменными character_set_connection и collation_connection. Если же вы используете CAST() с CHARACTER SET X, результирующим набором символов будет X, а порядком сопоставления - выбранный по умолчанию для X.
Нельзя указывать конструкцию COLLATE внутри CAST(), но можно за пределами CAST (). То есть CAST (... COLLATE...) - неверно, тогда как CAST (...) COLLATE... - верно.
Пример:
SELECT CAST(_latinl'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Операторы SHOW
Некоторые операторы SHOW в MySQL 4.1 добавлены, некоторые изменены для представления дополнительной информации о символьных наборах. Добавлены операторы SHOW CHARACTER SET, SHOW COLLATION И SHOW CREATE DATABASE. Операторы SHOW CREATE TABLE И SHOW COLUMNS модифицированы.
Команда SHOW CHARACTER SET отображает все доступные символьные наборы. Она предусматривает необязательную конструкцию LIKE, чтобы показывать только символьные наборы, соответствующие заданному шаблону, например:
mysql SHOW CHARACTER SET LIKE 'latin%';

См. раздел Синтаксис SHOW CHARACTER SET
Вывод SHOW collation включает все допустимые символьные наборы. Здесь также предусмотрена конструкция LIKE для выбора порядков сортировки, имена которых совпадают с заданным шаблоном, например:
mysql SHOW COLLATION LIKE 'latinl%!;
См. раздел Синтаксис SHOW COLLATION
SHOW CREATE DATABASE отображает операторы CREATE DATABASE, которые создадут заданную базу данных. Результат включает все опции базы данных. Поддерживаются DEFAULT CHARACTER SET и COLLATE. Все опции базы сохраняются в текстовом файле db.opt, который можно найти в каталоге данных.
mysql SHOW CREATE DATABASE a\G
Database: a
Create Database: CREATE DATABASE va4
/*140100 DEFAULT CHARACTER SET macce */
См. раздел Синтаксис SHOW CREATE DATABASE
Оператор SHOW CREATE TABLE похож, но отображает оператор create table, который создает заданную таблицу. Определение столбца теперь показывает все спецификации символьных наборов, а опции таблицы - информацию о символьном наборе.
См. раздел Синтаксис SHOW CREATE DATABASE
Оператор SHOW FULL COLUMNS отображает порядки сопоставления столбцов таблицы, если его вызывать как SHOW FULL COLUMNS. Столбцы типов CHAR, VARCHAR или TEXT имеют ненулевые порядки сопоставления. Числовые и другие несимвольные типы имеют порядок сопоставления NULL. Например:
mysql SHOW FULL COLUMNS FROM t;
I Field | Type | Collation | Null | Key | Default | Extra |
+-------- +----------- +--------------- +------- +------ +----------- +--------- +
I a | char(l) | latinl_bin | YES | | NULL | | I b | int(ll) I NULL | YES | | NULL | |
Имя набора символов не отображается (оно включено в имя порядка сопоставления). См. раздел Синтаксис SHOW COLLATION