Текущий набор символов и объединение сервера могут быть определены из значений переменных системы character_set_server и collation_server. Эти переменные могут быть изменены во время выполнения.
10.3.2. Набор символов и объединение базы данных
Каждая база данных имеет набор символов и объединение базы данных. Инструкции CREATE DATABASE и ALTER DATABASE имеет факультативные предложения для определения набора символов базы данных и объединения:
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name ]
[[DEFAULT] COLLATE collation_name ]
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name ]
[[DEFAULT] COLLATE collation_name ]
Ключевое слово SCHEMA может использоваться вместо DATABASE.
Все параметры базы данных сохранены в текстовом файле db.opt, который может быть найден в каталоге баз данных.
Предложения CHARACTER SET и COLLATE делают возможным создать базы данных с различными наборами символов и объединениями на том же самом сервере MySQL.
Пример:
CREATE DATABASE db_name CHARACTER SET latin1
COLLATE latin1_swedish_ci;
MySQL выбирает набор символов и объединение базы данных следующим способом:
Если CHARACTER SET X и COLLATE Y были определены, то используются набор символов X и объединение Y .
Если CHARACTER SET X указан без COLLATE, то применяется набор символов X и заданное по умолчанию объединение для него.
Если COLLATE Y был определен без CHARACTER SET, то используются набор символов, связанный с Y , и объединение Y .
Иначе, применяется набор символов и объединение сервера.
Набор символов базы данных и объединение используется как значения по умолчанию, если набор символов таблицы и объединение не определен в инструкции CREATE TABLE. Они не имеют никакой другой цели.
Набор символов и объединение для заданной по умолчанию базы данных может быть определено из значений переменных системы character_set_database и collation_database. Сервер устанавливает эти переменные всякий раз, когда заданная по умолчанию база данных изменяется. Если не имеется никакой заданной по умолчанию базы данных, переменные имеют то же самое значение, что и соответствующие переменные системы уровня сервера: character_set_server и collation_server.
10.3.3. Набор символов и объединение таблицы
Каждая таблица имеет набор символов таблицы и объединение. Инструкции CREATE TABLE и ALTER TABLE имеют факультативные предложения для определения набора символов таблицы и объединения:
CREATE TABLE tbl_name
( column_list )
[[DEFAULT] CHARACTER SET charset_name ]
[COLLATE collation_name ]]
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name ]
[COLLATE collation_name ]
Пример:
CREATE TABLE t1 ( … ) CHARACTER SET latin1 COLLATE latin1_danish_ci;
MySQL выбирает набор символов таблицы и объединение следующим способом:
Если CHARACTER SET X и COLLATE Y были определены, то применяются набор символов X и объединение Y .
Если CHARACTER SET X был определен без COLLATE, то используется набор символов X и заданное по умолчанию объединение.
Если COLLATE Y был определен без CHARACTER SET, то используется набор символов, связанный с Y и объединение Y .
Иначе, используется набор символов и объединение от базы данных.
Набор символов таблицы и объединение используется как значения по умолчанию, если набор символов столбца и объединение не определен в индивидуальных определениях столбца. Набор символов и объединение таблицы представляют собой расширения MySQL, не имеется ничего такого в стандарте SQL.
10.3.4. Набор символов и объединение столбца
Каждый символьный столбец (то есть, столбец типа CHAR, VARCHAR или TEXT) имеет набор символов и объединение столбца. Синтаксис определения столбца имеет факультативные предложения для определения набора символов и объединения столбца:
col_name {CHAR | VARCHAR | TEXT}
( col_length )
[CHARACTER SET charset_name ]
[COLLATE collation_name ]
Пример:
CREATE TABLE Table1
(column1 VARCHAR(5) CHARACTER SET latin1
COLLATE latin1_german1_ci);
MySQL выбирает набор символов столбца и объединение следующим способом:
Если были определены CHARACTER SET X и COLLATE Y , то используются набор символов X и объединение Y .
Есл был определен CHARACTER SET X без COLLATE, то используется набор символов X и заданное по умолчанию объединение.
Если COLLATE Y был определен без CHARACTER SET, то применяется набор символов, связанный с Y , и объединение Y .
Иначе, используется набор символов и объединение таблицы.
Предложения CHARACTER SET и COLLATE стандартны для SQL.
10.3.5. Набор символов и объединение символьных строковых литералов
Каждый символьный строковый литерал имеет набор символов и объединение.
Читать дальше