我创建了一个编码设置为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.
3条答案
按热度按时间7xllpg7q1#
您需要设置以下两项:
运行
db2 -tvf
之前,在db2cmd
命令行上。这适用于将CODESET
设置为UTF-8
的数据库。要检查数据库的CODESET
设置,请运行:并查找“数据库代码页”和“数据库代码集”,它们应该分别为
1208
和UTF-8
。bmp9r5qi2#
在处理编码时,你必须仔细观察你的环境,以及你目前所处的位置。2所以在你的情况下:
在你的客户端,你必须使用你的客户端的编码(或者告诉客户端你故意使用另一种编码在客户端(就像在windows-1251环境中的UTF-8编码文件)!)客户端和服务器之间的连接正在为你做的工作是将编码B改为编码A,以便将数据存储到数据库中。
czfnxgou3#
这是我通过设置db2codepage的工作,感谢Zoran Regvart先生。顺便说一下,设置后,您需要执行“db2终止”来重置客户端,然后重新连接。