与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的解决方案。
答案 0 :(得分:3)
在多字节UTF-8编码中,每个ASCII字符都是一个字节,但非ASCII字符各占两到四个字节。定义CHAR字段时应考虑这一点。根据ASCII与非ASCII字符的比例,大小为n字节的CHAR字段可以包含从n / 4到n个字符的任何位置。
这意味着使用DB2数据库无法满足您的要求。
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。