Есл был определен CHARACTER SET
Если COLLATE
Иначе, используется набор символов и объединение таблицы.
Предложения CHARACTER SET и COLLATE стандартны для SQL.
10.3.5. Набор символов и объединение символьных строковых литералов
Каждый символьный строковый литерал имеет набор символов и объединение.
Символьный строковый литерал может иметь факультативный набор символов и предложение COLLATE:
[_
[COLLATE
Пример:
SELECT '
SELECT _latin1'
SELECT _latin1'
Для простой инструкции SELECT '
Выражение _
Пример:
SELECT _latin1 x'AABBCC';
SELECT _latin1 0xAABBCC;
MySQL определяет набор символов литерала и объединение следующим способом:
Если были определены
Если определен
Иначе, используются набор символов и объединение, заданные переменными системы character_set_connection и collation_connection.
Пример:
Строка с набором символов latin1 и объединением latin1_german1_ci:
SELECT _latin1'M+-ller' COLLATE latin1_german1_ci;
Строка с набором символов latin1 и заданным по умолчанию объединением (то есть, latin1_swedish_ci):
SELECT _latin1'M+-ller';
Строка с набором символов и объединением по умолчанию подключения:
SELECT 'M+-ller';
Набор символов и предложение COLLATE выполнены согласно стандарту SQL
introducer указывает набор символов для следующей строки, но не изменяет того, как синтаксический анализатор выполняет обработку Escape внутри строки. Escape всегда интерпретируются синтаксическим анализатором согласно набору символов, заданному в character_set_connection.
Следующие примеры показывают, что происходит обработка Escape, используя character_set_connection даже в присутствии introducer. Примеры используют SET NAMES (который изменяет character_set_connection) и отображает возникающие в результате строки, использующие HEX(), чтобы было видно точное строковое содержимое.
Пример 1:
mysql> SET NAMES latin1;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT HEX('+а '), HEX(_sjis'+а ');
+-------------+------------------+
| HEX('+а ') | HEX(_sjis'+а ') |
+-------------+------------------+
| E00A | E00A |
+-------------+------------------+
1 row in set (0.00 sec)
Здесь +а (шестнадцатеричное значение E0) сопровождается , управляющей последовательностью для новой строки. Управляющая последовательность интерпретируется, используя значение character_set_connection latin1, чтобы произвести литерал newline (новая строка, шестнадцатеричное значение 0A). Это случается даже для второй строки. То есть introducer _sjis не воздействует на обработку синтаксического анализатора Escape.
Пример 2:
mysql> SET NAMES sjis;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT HEX('+а '), HEX(_latin1'+а ');