3

我有一个使用设置为 UTF-8 的编码创建的 DB2

db2 create database mydb using codeset UTF-8

我的数据插入脚本也以 UTF-8 编码存储。现在的问题是命令行处理器似乎使用不同的编码,因为 Windows 安装不使用 UTF-8:

C:\Users\Administrator>chcp
Active code page: 850

这导致我的数据(包含特殊字符)未正确存储到数据库中的问题。

在 Linux/AIX 下,我可以通过设置更改命令行编码

export LC_ALL=en_US.UTF-8

我如何在 Windows 下实现这一点?我已经试过了

chcp 65001

更新:但这不会有任何影响?似乎 db2clp 无法处理 UTF-8 编码文件,因为它会打印出垃圾:

D:\Program Files\ibm_db2\SQLLIB\BIN>chcp 65001
Active code page: 65001

D:\Program Files\ibm_db2\SQLLIB\BIN>type d:\tmp\encoding.sql
INSERT INTO MY_TABLE (ID, TXT) VALUES (99, 'äöü');


D:\Program Files\ibm_db2\SQLLIB\BIN>db2 connect to mydb

Datenbankverbindungsinformationen

Datenbank-Server                                                = DB2/NT64 9.5.0
SQL-Berechtigungs-ID                                            = MYUSER
Aliasname der lokalen Datenbank                                 = MYDB

D:\Program Files\ibm_db2\SQLLIB\BIN>db2 -tvf d:\tmp\encoding.sql
INSERT INTO MY_TABLE (ID, TXT) VALUES (99, 'äöü')
DB20000I  Der Befehl SQL wurde erfolgreich ausgeführt.
4

2 回答 2

4

您需要同时设置:

CHCP 65001
SET DB2CODEPAGE=1208

db2cmd命令行上,在运行之前db2 -tvf。这适用于已CODESET设置为UTF-8. 要检查CODESET数据库运行的设置:

db2 get db cfg for <your database>

1208并分别查找它们应该是的“数据库代码页”和“数据库代码集” UTF-8

于 2014-11-19T11:25:01.850 回答
1

在处理编码时,您必须仔细查看您的环境以及您当前所在的位置。所以在你的情况下:

  • 服务器以编码 A 存储其数据(如 UTF-8)
  • 客户端位于具有编码 B 的环境中(如 windows-1252)

在您的客户端中,您必须使用客户端的编码(或告诉客户端您有意在客户端使用另一种编码(例如 windows-1251 环境中的 UTF-8 编码文件)!)。客户端和服务器之间的连接正在为您将编码 B 更改为编码 A 以将数据存储到数据库中。

于 2013-03-11T15:50:21.640 回答