4

就像在 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 的解决方案。

4

3 回答 3

3

DB2

DB2 文档说:

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

这意味着对于 DB2 数据库,您不能按照您的要求进行操作。


mysql

MySql 文档说:

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

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

于 2010-04-30T11:30:11.693 回答
1

对于 SQL Server,您需要使用NVARCHAR (unicode)。希望有人可以与其他人一起筹码!

于 2010-04-30T09:07:34.177 回答
0

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

于 2010-11-21T14:10:51.403 回答