DB2:如何在Windows下设置db2clp的编码?

tpxzln5u  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(339)

我创建了一个编码设置为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

UPDATE:但是这不会有任何效果吗?看起来db2 clp不能处理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.
7xllpg7q

7xllpg7q1#

您需要设置以下两项:

CHCP 65001
SET DB2CODEPAGE=1208

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

db2 get db cfg for <your database>

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

bmp9r5qi

bmp9r5qi2#

在处理编码时,你必须仔细观察你的环境,以及你目前所处的位置。2所以在你的情况下:

  • 服务器以编码A(如UTF-8)存储其数据
  • 客户端驻留在编码为B的环境中(如windows-1252)

在你的客户端,你必须使用你的客户端的编码(或者告诉客户端你故意使用另一种编码在客户端(就像在windows-1251环境中的UTF-8编码文件)!)客户端和服务器之间的连接正在为你做的工作是将编码B改为编码A,以便将数据存储到数据库中。

czfnxgou

czfnxgou3#

这是我通过设置db2codepage的工作,感谢Zoran Regvart先生。顺便说一下,设置后,您需要执行“db2终止”来重置客户端,然后重新连接。

相关问题