Spec-Zone .ru
спецификации, руководства, описания, API

10.1.13. Преобразование Набора символов столбца

Чтобы преобразовать столбец двоичной или недвоичной строки, чтобы использовать определенный набор символов, использовать ALTER TABLE. Для успешного преобразования, чтобы произойти, должно применяться одно из следующих условий:

Предположите что таблица 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 оператор. Иначе, получающееся определение столбца не будет включать те атрибуты.