与在Oracle中一样,我希望根据插入的字符指定一个可变长度的VARCHAR( 60 CHAR )字段。
例如:
create table X (text varchar(3))
insert into X (text) VALUES ('äöü')应该是可能的(使用UTF8作为数据库的默认字符集)。
在DB2上,我得到了这个错误:DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001 (字符数据,发生了右截断;例如,update或insert值对于列来说是一个太长的字符串,或者DateTime值不能分配给主机变量,因为它太小了。)
我正在寻找DB2,MsSql,MySql,超音速的解决方案。
发布于 2010-04-30 19:30:12
DB2
DB2 documentation说:
在多字节UTF-8编码中,每个ASCII码是一个字节,但非ASCII码每个字符占用两到四个字节。在定义CHAR字段时,应该考虑到这一点。根据ASCII字符与非ASCII字符的比率,大小为n字节的CHAR字段可以包含n/4到n个字符。
这意味着使用DB2数据库时,您不能执行所要求的操作。
MySql
MySql documentation说:
Unicode UTF-8 (具有8位单位的Unicode转换格式)是存储
数据的另一种方法。它是根据RFC 3629实现的,RFC 3629描述了从一到四个字节的编码序列。目前,MySQL对UTF8的支持不包括四字节序列。(较早的UTF-8编码标准RFC2279描述了需要1到6个字节的UTF-8序列。RFC 3629使RFC 2279过时;因此,不再使用具有五个和六个字节的序列。)
这意味着对于MySql数据库,您可以使用作为列定义,以获得所需的内容。
https://stackoverflow.com/questions/2743397
复制相似问题