我正在将mssql转换为db2。mssql中的nchar/nvarchar需要在ibm db2中转换nchar/nvarchar。但是,对于dbeaver工具,db2控制台,所有操作都是相同的。我需要将nchar(n)和nvarchar(max)转换为db2数据类型,因为可以接受unicode。请帮帮我,谢谢。(我使用的是db2 docker镜像:ibmcom/db2:11.5.6.0a)
disbfnqx1#
在IBM DB2中,可以使用以下数据类型来表示Unicode字符:
请注意,CCSID(编码字符集标识符)指定用于数据的字符编码,UNICODE表示数据是Unicode格式。您可以使用DBeaver工具或DB2控制台执行SQL语句来创建新表或使用新数据类型更改现有表。下面是一个示例SQL语句,用于在IBM DB2中创建一个新表,将nvarchar(max)数据类型转换为CLOB(2G)CCSID UNICODE:
CREATE TABLE mytable ( id INT, data CLOB(2G) CCSID UNICODE );
我希望这有帮助!
mnemlml82#
对于一个注解来说,它变得太大了,所以我会在@Nuwans的答案中添加一些信息。实际上,它不仅仅是-例如- VARCHAR(n)。我假设你使用的是支持UTF-8的Db2数据库。VARCHAR(n)的含义取决于db cfg STRING_UNIT。如果它是SYSTEM,则n表示字节数(例如,确定字符串的长度会变得非常麻烦),即使它被指定为SYSTEM,您仍然可以通过将列声明为以下内容来使用多字节字符:
VARCHAR(n CODEUNITS32)
我发现一个旧的信息,指出NVARCHAR(MAX)可以容纳(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters。我假设这并没有减少,因为它比可以存储在VARCHAR,VARGRAPHIC或CLOB(在CODEUNITS 32中)中的内容更大。请参阅sql-xml-limits,字符串限制部分。在该表中,您还可以找到:
(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters
Maximum length of DBCLOB (in double-byte characters or CODEUNITS16) 1,073,741,823
因此,NVARCHAR(MAX)的最佳选择可能是:
DBCLOB(1073741823 CODEUNITS16)
GRAPHIC / VARGRAPHIC在Db2中UTF-8之前就已经存在,作为处理多字节字符的一种方法。
2条答案
按热度按时间disbfnqx1#
在IBM DB2中,可以使用以下数据类型来表示Unicode字符:
请注意,CCSID(编码字符集标识符)指定用于数据的字符编码,UNICODE表示数据是Unicode格式。
您可以使用DBeaver工具或DB2控制台执行SQL语句来创建新表或使用新数据类型更改现有表。下面是一个示例SQL语句,用于在IBM DB2中创建一个新表,将nvarchar(max)数据类型转换为CLOB(2G)CCSID UNICODE:
我希望这有帮助!
mnemlml82#
对于一个注解来说,它变得太大了,所以我会在@Nuwans的答案中添加一些信息。实际上,它不仅仅是-例如- VARCHAR(n)。我假设你使用的是支持UTF-8的Db2数据库。
VARCHAR(n)的含义取决于db cfg STRING_UNIT。如果它是SYSTEM,则n表示字节数(例如,确定字符串的长度会变得非常麻烦),即使它被指定为SYSTEM,您仍然可以通过将列声明为以下内容来使用多字节字符:
我发现一个旧的信息,指出NVARCHAR(MAX)可以容纳
(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters
。我假设这并没有减少,因为它比可以存储在VARCHAR,VARGRAPHIC或CLOB(在CODEUNITS 32中)中的内容更大。请参阅sql-xml-limits,字符串限制部分。在该表中,您还可以找到:因此,NVARCHAR(MAX)的最佳选择可能是:
GRAPHIC / VARGRAPHIC在Db2中UTF-8之前就已经存在,作为处理多字节字符的一种方法。