Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы преобразовать столбец двоичной или недвоичной строки, чтобы использовать определенный набор символов,
использовать ALTER TABLE
. Для успешного преобразования, чтобы произойти, должно
применяться одно из следующих условий:
Если у столбца есть двоичный тип данных (BINARY
, VARBINARY
, BLOB
), все значения, которые это содержит, должны быть закодированы,
используя единственный набор символов (набор символов, Вы преобразовываете столбец в). Если Вы
используете двоичный столбец, чтобы хранить информацию в многократных наборах символов, у MySQL нет
никакого способа знать, какое использование значений, какой набор символов и не может преобразовать
данные должным образом.
Если у столбца есть недвоичный тип данных (CHAR
, VARCHAR
, TEXT
), его содержание должно быть закодировано в наборе символов столбца,
не некотором другом наборе символов. Если содержание кодируется в различном наборе символов, можно
преобразовать столбец, чтобы использовать двоичный тип данных сначала, и затем к недвоичному столбцу с
требуемым набором символов.
Предположите что таблица t
назвали двоичный столбец col1
определенный как VARBINARY(50)
. Предполагая, что
информация в столбце кодируется, используя единственный набор символов, можно преобразовать это в недвоичный
столбец, у которого есть тот набор символов. Например, если col1
содержит двоичных
данных, представляющих символы в greek
набор символов, можно преобразовать это
следующим образом:
ALTER TABLE t MODIFY col1 VARCHAR(50) CHARACTER SET greek;
Если у Вашего исходного столбца есть тип BINARY(50)
, Вы могли преобразовать это в
CHAR(50)
, но получающиеся значения будут дополнены 0x00
байты в конце, который может быть нежелательным. Чтобы удалить эти байты,
используйте TRIM()
функция:
UPDATE t SET col1 = TRIM(TRAILING 0x00 FROM col1);
Предположите ту таблицу t
назвали недвоичный столбец col1
определенный как CHAR(50) CHARACTER SET latin1
но
Вы хотите преобразовать это, чтобы использовать utf8
так, чтобы можно было
сохранить значения со многих языков. Следующий оператор выполняет это:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
Преобразование может быть с потерями, если столбец содержит символы, которые не находятся в обоих наборах символов.
Особый случай происходит, если у Вас есть старые таблицы до MySQL 4.1, где недвоичный столбец содержит значения,
которые фактически кодируются в наборе символов, отличающемся от набора символов значения по умолчанию сервера.
Например, приложение, возможно, сохранило sjis
значения в столбце, даже при том,
что набор символов значения по умолчанию MySQL был latin1
. Возможно преобразовать
столбец, чтобы использовать надлежащий набор символов, но дополнительный шаг требуется. Предположите, что набор
символов значения по умолчанию сервера был latin1
и col1
определяется как CHAR(50)
но его содержание
sjis
значения. Первый шаг должен преобразовать столбец в двоичный тип данных,
который удаляет существующую информацию о наборе символов, не выполняя преобразования символов:
ALTER TABLE t MODIFY col1 BLOB;
Следующий шаг должен преобразовать столбец в недвоичный тип данных с надлежащим набором символов:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET sjis;
Эта процедура требует, чтобы таблица не уже была изменена с операторами такой как INSERT
или UPDATE
после обновления до MySQL 4.1 или позже. В этом случае MySQL сохранил бы новые значения в использовании столбца
latin1
, и столбец будет содержать соединение sjis
и
latin1
значения и не могут быть преобразованы должным образом.
Если бы Вы определили атрибуты, создавая столбец первоначально, то следует также определить их, изменяя таблицу
с ALTER
TABLE
. Например, если Вы определили NOT NULL
и явное DEFAULT
значение, следует также обеспечить их в ALTER TABLE
оператор. Иначе, получающееся определение столбца не будет
включать те атрибуты.