Таблицы SQL, использующие VARCHAR с UTF8 (относительно длины многобайтовых символов) - PullRequest
4 голосов
/ 30 апреля 2010

Как и в Oracle VARCHAR( 60 CHAR ) Я хотел бы указать поле varchar с переменной длиной в зависимости от вставленных символов.

например:

create table X (text varchar(3))
insert into X (text) VALUES ('äöü')

Должно быть возможно (с UTF8 в качестве кодировки по умолчанию для базы данных).

В DB2 я получил эту ошибку: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001 (Символьные данные, усечение справа произошло; например, значение обновления или вставки - это строка, которая слишком длинна для столбца или значение datetime не может быть назначено переменной хоста, поскольку она слишком мала.)

Я ищу решения для DB2, MsSql, MySql, Hypersonic.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2010

DB2

Документация DB2 гласит:

В многобайтовом кодировании UTF-8 каждый символ ASCII составляет один байт, но не-ASCII-символы занимают от двух до четырех байтов каждый. Это следует учитывать при определении полей CHAR. В зависимости от соотношения символов ASCII и не-ASCII поле CHAR размером n байтов может содержать от n / 4 до n символов.

Это означает, что с базой данных DB2 вы не можете делать то, что просили.


MySql

Документация MySql гласит:

UTF-8 (формат преобразования Unicode с 8-битными единицами) является альтернативным способом хранения данных Unicode. Он реализован в соответствии с RFC 3629, который описывает последовательности кодирования, которые занимают от одного до четырех байтов. В настоящее время поддержка MySQL для UTF-8 не включает четырехбайтовые последовательности. (Более старый стандарт кодирования UTF-8, RFC 2279, описывает последовательности UTF-8, которые занимают от одного до шести байтов. RFC 3629 делает RFC 2279 устаревшим; по этой причине последовательности с пятью и шестью байтами больше не используются.)

Это означает, что с базой данных MySql вы можете использовать VARCHAR(3) CHARACTER SET utf8 в качестве определения столбца, чтобы получить то, что вы просили.

1 голос
/ 30 апреля 2010

Для SQL Server вам необходимо использовать NVARCHAR (Unicode). Надеюсь, кто-то может скинуться с другими!

0 голосов
/ 21 ноября 2010

Для HSQLDB (Hypersonic) VARCHAR (3) работает как кодировка по умолчанию UTF16.

...