使用 unicode 的 DB2 数据库

Posted

技术标签:

【中文标题】使用 unicode 的 DB2 数据库【英文标题】:DB2 database using unicode 【发布时间】:2009-12-01 11:25:09 【问题描述】:

我对应该存储 unicode 字符的 DB2 数据库有疑问。连接是使用 JDBC 建立的。

如果我想在数据库中插入一个 unicode 字符串,我该怎么做?

INSERT INTO my_table(id, string_field) VALUES(1, N'my unicode string');

INSERT INTO my_table(id, string_field) VALUES(1, 'my unicode string');

我不知道我是否必须使用 N 前缀。对于那里的大多数数据库,它在使用时运行良好,但我不太确定 DB2。我还有一个问题,我手头没有可以测试这些语句的 DB2 数据库。 :-(

非常感谢!

【问题讨论】:

仅供参考:Express-C 版本可能对您的测试有用。 【参考方案1】:

constants(从 DB2 9.7 开始)上的文档说明了 graphic strings:

图形字符串常量指定一个可变长度的图形字符串,该字符串由一系列以单字节撇号 (') 开头和结尾的双字节字符组成,前面是单字节 G 或 N。撇号之间的字符必须代表偶数字节,并且图形字符串的长度不能超过 16 336 字节。

【讨论】:

有趣,不知道,但这闻起来像是在未配置为使用 unicode 的数据库/表中插入 unicode 数据的“解决方法”。我宁愿只是将数据库配置为使用 unicode 而不是弄乱 SQL 语句。 老实说,我不知道这将如何通过隐式 UTF-16 的 JDBC 驱动程序和 Java 字符串表达式发挥作用。这种支持看起来更适合使用八位字节字符的代码。这不是我的第一选择,但我也不会草率下结论 - 可能有一些旧模式需要发布者使用。 我对这句话有一个担忧:当使用这种表示法时,我只能使用 UCS-2,对吧? UTF-8 编码的字符串呢? 我发布这个问题的原因是我正在开发一个应该支持不同类型数据库的系统。目前,我正在尝试确定如果每个字符串文字都以 N 为前缀,它是否会损害任何数据库。【参考方案2】:

我从未在 DB2 环境中听说过这个。 Google 告诉我这是更多特定于 MS SQL Server 的。在 DB2 和所有其他体面的 RDBMS 中,您只需要确保数据库正在使用 UTF-8 字符集。您通常在 CREATE 语句中指定。这是 DB2 变体:

CREATE DATABASE my_db USING CODESET UTF-8;

这应该是在 DB2 方面。您无需为此更改标准 SQL 语句。您也不必担心 Java,因为它在内部已经使用 Unicode。

【讨论】:

【参考方案3】:

将 unicode 字符串常量包含在 N'' 中是通过 DB2 DB 的 JDBC 应用程序工作的。

【讨论】:

以上是关于使用 unicode 的 DB2 数据库的主要内容,如果未能解决你的问题,请参考以下文章

DB2 代码从 Unicode 到 ISO8859-2 并返回

DB2的JDBC连接字符串有数据库字符集编码的配置参数吗

mysql应该用啥编码格式储存在数据库里呢?

数据库查询基础

db2数据库的使用总结

db2数据库当前连接数如何查看