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

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

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

Если столбец имеет двоичный тип данных (BINARY, VARBINARY, BLOB), все значения, которые он содержит, должны быть закодированы, используя одиночный набор символов. Если Вы используете двоичный столбец, чтобы сохранить информацию в нескольких наборах символов, MySQL не имеет никакого способа узнать, который набор символов применять и не может преобразовывать данные правильно.

Если столбец имеет не двоичный тип данных (CHAR, VARCHAR, TEXT), содержание должно быть закодировано в наборе символов столбца, а не в некотором другом наборе символов. Если содержание закодировано в ином наборе символов, Вы можете преобразовывать столбец, чтобы сначала использовать двоичный тип данных, а затем к не двоичному столбцу с желательным набором символов.

Предположите, что таблица t имеет двоичный столбец col1, определенный как BINARY(50). При условии, что информация в столбце закодирована, используя одиночный набор символов, Вы можете преобразовывать это в не двоичный столбец, который имеет нужный набор символов. Например, если col1 содержит двоичные символы представления данных в греческом наборе символов (greek), Вы можете преобразовывать это следующим образом:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET greek;

Предположите, что таблица t имеет не двоичный столбец col1, определенный как CHAR(50) CHARACTER SET latin1 , но Вы хотите преобразовывать это, чтобы использовать utf8 так, чтобы Вы могли сохранять значения из многих языков. Следующая инструкция выполняет это:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

Преобразование может быть с потерями, если столбец содержит символы, которые не содержатся в обоих наборах символов.

Специальный случай происходит, если Вы имеете старые таблицы из MySQL 4.0 или ранее, где не двоичный столбец содержит значения, которые фактически закодированы в наборе символов, отличном от заданного по умолчанию набора символов сервера. Например, прикладная программа могла бы сохранить значения sjis в столбце даже при том, что заданный по умолчанию набор символов MySQL latin1. Возможно преобразовать столбец, чтобы использовать соответствующий набор символов, но дополнительный шаг требуется. Предположите, что заданный по умолчанию набор символов сервера был latin1, а col1 определен как CHAR(50), но содержит значения в sjis. Первый шаг должен преобразовать столбец в двоичный тип данных, который удаляет существующую информацию набора символов без того, чтобы выполнить любое символьное преобразование:

ALTER TABLE t MODIFY col1 BINARY(50);

Следующий шаг должен преобразовать столбец в не двоичный тип данных с соответствующим набором символов:

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Установка размера столбца

Из книги Microsoft Office автора Леонтьев Виталий Петрович

Установка размера столбца Мы уже говорили, что размер столбцов можно варьировать. Пришло время проверить это утверждение на практике. Если вы хотите, чтобы все столбцы в таблице были одинакового размера, наведите курсор на правую границу верхнего индекса


Пример: преобразование символов из ASCII в Unicode

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Пример: преобразование символов из ASCII в Unicode Программа 2.4 достраивает программу 1.3, в которой использовалась вспомогательная функция CopyFile. С копированием файлов вы уже знакомы, поэтому в данном примере эта операция дополняется преобразованием файла к кодировке Unicode в


Преобразование символов из кодировки ASCII в Unicode

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Преобразование символов из кодировки ASCII в Unicode Измерения выполнялись для восьми программ, каждая из которых преобразовывала файл размером 12,8 Мбайт в файл размером 25,6 Мбайт. Соответствующие результаты представлены в табл. В.2.1. Программа atou (программа 2.4) сопоставима с


10.3.4. Набор символов и объединение столбца

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

10.3.4. Набор символов и объединение столбца Каждый символьный столбец (то есть, столбец типа CHAR, VARCHAR или TEXT) имеет набор символов и объединение столбца. Синтаксис определения столбца имеет факультативные предложения для определения набора символов и объединения


10.3.7. Примеры назначения набора символов и объединения

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

10.3.7. Примеры назначения набора символов и объединения Следующие примеры показывают, как MySQL определяет заданные по умолчанию набор символов и объединение.Пример 1: определение таблицы и столбца CREATE TABLE t1 (c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci)DEFAULT CHARACTER SET latin2COLLATE latin2_bin;Здесь мы


10.6. Операции, на которые воздействует поддержка набора символов

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

10.6. Операции, на которые воздействует поддержка набора символов Этот раздел описывает операции, которые берут во внимание информацию о наборе


2.15. Преобразование символов в коды ASCII и обратно

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

2.15. Преобразование символов в коды ASCII и обратно В Ruby символ представляется целым числом. Это поведение изменится в версии 2.0, а возможно и раньше. В будущем предполагается хранить символы в виде односимвольных строк.str = "Martin"print str[0] # 77Если в конец строки дописывается


Определение класса символов и преобразование символов

Из книги автора

Определение класса символов и преобразование символов Функция Краткое описание isalnum проверка на букву или цифру isalpha проверка на букву isascii проверка на символ из набора кодировки ASCII iscntrl проверка на управляющий символ isdigit проверка на десятичную


Изменение типа данных столбца

Из книги автора

Изменение типа данных столбца Используйте предложение ALTER COLUMN В операторе ALTER TABLE, например:ALTER TABLE table1 ALTER COLUMN field1 TYPE char(20);Информацию об изменении столбцов таблицы см. в разд. "Изменение таблиц" главы


Переопределение набора символов

Из книги автора

Переопределение набора символов Имея глобальный набор символов по умолчанию для базы данных, вы можете при необходимости в дальнейшем переопределить его. Вы можете включить атрибут набора символов при определении домена. Вы можете переопределить значение набора


Использование доменов в определении столбца

Из книги автора

Использование доменов в определении столбца Пример В некоторой базе данных есть домен SYSUSER, размером до 31 символа, имеющий значение по умолчанию, получаемое из контекстной переменной CURRENT_USER:CREATE DOMAIN SYSUSER AS VARCHAR(31) DEFAULT CURRENT_USER;Объявляемая таблица содержит столбец UPDATED_BY,


Добавление столбца

Из книги автора

Добавление столбца Один или более столбцов можно добавить в таблицу в одном операторе при использовании предложения ADD. Каждое предложение ADD включает полное определение столбца. Используется тот же самый синтаксис, что и при определении столбца в операторе CREATE TABLE.


Группировка по номеру столбца

Из книги автора

Группировка по номеру столбца Сервер Yaffil расширяет синтаксис инструкции group by. Допускается указывать номера столбцов для группировки, как в инструкции oreder by.Пример:select count(a), b from t group by