Алексей Паутов - MySQL: руководство профессионала
- Название:MySQL: руководство профессионала
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Паутов - MySQL: руководство профессионала краткое содержание
Это не совсем книга. Просто по ходу работы и изучения пакета у меня накопилось немало заметок, которые я в конце концов собрал воедино и опубликовал с оглавлением и под единым названием. Данные заметки относятся к версиям 4 и 5 пакета MySQL. По ходу текста особо отмечены места, относящиеся к специфической версии пакета.
MySQL: руководство профессионала - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Пример:
column1 = 'A'
Использует объединение column1
column1 = 'A' COLLATE x
Использует объединение 'A' COLLATE x
column1 COLLATE x = 'A' COLLATE y
Ошибка
Функция COERCIBILITY() может использоваться, чтобы определить coercibility строкового выражения:
mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
– > 0
mysql> SELECT COERCIBILITY(VERSION());
– > 3
mysql> SELECT COERCIBILITY('A');
– > 4
10.5.5. Объединения должны быть для правильного набора символов
Каждый набор символов имеет одно или большее количество объединений, но каждое объединение связано с одним и только одним набором символов. Следовательно, следующая инструкция вызывает сообщение об ошибке, потому что объединение latin2_bin не допустимо с набором символов latin1:
mysql> SELECT _latin1 'x' COLLATE latin2_bin;
ERROR 1253 (42000): COLLATION 'latin2_bin' is not valid
for CHARACTER SET 'latin1'
10.5.6. Пример эффекта объединения
Предположите, что столбец X в таблице T имеет эти значения столбца latin1:
Muffler
M├╝ller
MX Systems
MySQL
Предположите также, что значения столбца получены, используя следующую инструкцию:
SELECT X FROM T ORDER BY X COLLATE collation_name ;
Следующая таблица показывает возникающий в результате порядок значений, если мы используем ORDER BY с различными объединениями:
latin1_swedish_ci
latin1_german1_ci
latin1_german2_ci
Muffler
Muffler
M├╝ller
MX Systems
M├╝ller
Muffler
M├╝ller
MX Systems
MX Systems
MySQL
MySQL
MySQL
Символ, который вызывает различные порядки сортировки в этом примере: U с двумя точками сверху, который в Германии известен как U-umlaut.
Первый столбец показывает результат SELECT, использующего правило объединения Swedish/Finnish, которое говорит, что U-umlaut сортируется после Y.
Второй столбец показывает результат SELECT, использующего правило German DIN-1, которое говорит, что U-umlaut сортируется с U.
Третий столбец показывает результат SELECT, использующего правило German DIN-2 rule, которое говорит, что U-umlaut сортируется с UE.
10.6. Операции, на которые воздействует поддержка набора символов
Этот раздел описывает операции, которые берут во внимание информацию о наборе символов.
10.6.1. Строки результата
MySQL имеет много операторов и функций, которые возвращают строку. Этот раздел отвечает на вопрос: каков набор символов и объединение у такой строки?
Для простых функций, которые берут строку ввода и возвращают строковый результат как вывод, набор символов и объединение вывода такие же, как таковые у входного значения. Например, UPPER( X ) возвращает строку, чья символьная строка и объединение являются такими же, как X . Это относится к INSTR(), LCASE(), LOWER(), LTRIM(), MID(), REPEAT(), REPLACE(), REVERSE(), RIGHT(), RPAD(), RTRIM(), SOUNDEX(), SUBSTRING(), TRIM(), UCASE() и UPPER().
Обратите внимание: функция REPLACE(), в отличие от всех других функций, всегда игнорирует объединение строкового ввода и выполняет чувствительное к регистру сравнение.
Если строковый ввод или функциональный результат является двоичной строкой, она не имеет никакого набора символов или объединения. Это может быть проверено, используя функции CHARSET() и COLLATION(), которые вернут binary, чтобы указать, что их параметр двоичная строка:
mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary | binary |
+---------------------+-----------------------+
Для операций, которые объединяют многостроковые вводы и возвращают одиночный строковый вывод, правила соединения частей стандарта SQL дают определение объединения результата:
Если явно задан COLLATE X , использовать X .
Если явно заданы COLLATE X и COLLATE Y , выдать ошибку.
Иначе, если все объединения X , используовать X .
Иначе, результат не имеет никакого объединения вообще.
Например, с CASE … WHEN a THEN b WHEN b THEN c COLLATE X END возникающее в результате объединение X . То же самое для UNION, ||, CONCAT(), ELT(), GREATEST(), IF() и LEAST().
Для операций, которые преобразовываются в символьные данные, набор символов и объединение строк результата операции определены переменными системы character_set_connection и collation_connection. Это применяется только для CAST(), CONV(), FORMAT(), HEX() и SPACE().
Если Вы не уверены относительно набора символов или объединения результата, возвращенного строковой функцией, Вы можете использовать функцию CHARSET() или COLLATE(), чтобы выяснить:
mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER() | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| test@localhost | utf8 | utf8_general_ci |
+----------------+-----------------+-------------------+
10.6.2. CONVERT() и CAST()
CONVERT() обеспечивает способ преобразовать данные между различными наборами символов. Синтаксис:
CONVERT( expr USING transcoding_name )
В MySQL имена перекодировки такие же, как соответствующие имена наборов символов.
Примеры:
SELECT CONVERT(_latin1'M├╝ller' USING utf8);
INSERT INTO utf8table (utf8column)
SELECT CONVERT(latin1field USING utf8) FROM latin1table;
CONVERT(… USING …) выполнено согласно стандарту SQL.
Вы можете также использовать CAST(), чтобы преобразовать строку в иной набор символов. Синтаксис:
CAST( character_string AS
character_data_type
CHARACTER SET charset_name )
Пример:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);
Если Вы используете CAST() без того, чтобы определить CHARACTER SET, возникающие в результате набор символов и объединение определены переменными системы character_set_connection и collation_connection. Если Вы используете CAST() с CHARACTER SET X, возникающие в результате набор символов и объединение X и заданное по умолчанию объединение для X.
Вы не можете использовать предложение COLLATE внутри CAST(), но Вы можете использовать это снаружи. То есть CAST(… COLLATE …) запрещено, но CAST(…) COLLATE … допустимо.
Пример:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
10.6.3. Инструкции SHOW и INFORMATION_SCHEMA
Несколько инструкций SHOW обеспечивают дополнительную информацию о наборе символов. Они включают SHOW CHARACTER SET, SHOW COLLATION, SHOW CREATE DATABASE, SHOW CREATE TABLE и SHOW COLUMNS. Эти инструкции описаны здесь кратко.
INFORMATION_SCHEMA имеет несколько таблиц, которые содержат информацию, подобную отображаемой инструкциями SHOW. Например, таблицы CHARACTER_SETS и COLLATIONS содержат информацию, отображаемую SHOW CHARACTER SET и SHOW COLLATION.
Команда SHOW CHARACTER SET показывает все доступные наборы символов. Требуется факультативное предложение LIKE, которое указывает, которым именам набора символов соответствовать. Например:
mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
+---------+-----------------------------+-------------------+--------+
Вывод SHOW COLLATION включает все доступные наборы символов. Требуется факультативное предложение LIKE, которое указывает, которым именам объединения соответствовать. Например:
Читать дальшеИнтервал:
Закладка: