使用带有UTF8的VARCHAR的SQL表(关于多字节字符长度)

时间:2010-04-30 09:03:45

标签: mysql sql-server utf-8 db2 hsqldb

与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  (字符数据,发生了右截断;例如,更新或插入值是对于列太长的字符串,或者日期时间值无法分配给主变量,因为它太小。)

我正在寻找DB2,MsSql,MySql,Hypersonic的解决方案。

3 个答案:

答案 0 :(得分:3)

DB2

DB2 documentation说:

  

在多字节UTF-8编码中,每个ASCII字符都是一个字节,但非ASCII字符各占两到四个字节。定义CHAR字段时应考虑这一点。根据ASCII与非ASCII字符的比例,大小为n字节的CHAR字段可以包含从n / 4到n个字符的任何位置。

这意味着使用DB2数据库无法满足您的要求。


MySQL的

MySql documentation说:

  

UTF-8(具有8位单位的Unicode转换格式)是存储Unicode数据的另一种方法。它是根据RFC 3629实现的,它描述了从一到四个字节的编码序列。目前,MySQL对UTF-8的支持不包括四字节序列。 (UTF-8编码的旧标准RFC 2279描述了从1到6个字节的UTF-8序列.RFC 3629使RFC 2279过时;因此,不再使用具有5个和6个字节的序列。)< / p>

这意味着使用MySql数据库,您可以使用VARCHAR(3) CHARACTER SET utf8作为列定义来获取您要求的内容。

答案 1 :(得分:1)

对于SQL Server,您需要使用NVARCHAR(unicode)。希望有人能与其他人合作!

答案 2 :(得分:0)

对于HSQLDB(Hypersonic),VARCHAR(3)的默认编码为UTF16。