linux下db2执行脚本乱码问题

DB2数据库存在三种级别的字符集:操作系统级LANG、实例级(客户端级)db2codepage、数据库级Database code page/set。

操作系统级是用户应用程序使用的代码页。可以使用环境变量LANG=C等来设置。用set命令、或者echo $LANG查看其值。

实例级DB2应用程序进行客户端到数据库服务端代码页转换时使用的,比如使用SQL脚本时,db2读取脚本时就是按照实例级的字符集db2codepage来识别该脚本的。可用db2set -all来查看其值。可用db2set db2codepage=1208来设置其值。

数据库级的字符集是在创建数据库时指定的,是后续不可修改的。设置语句类似db2 "CREATE DATABASE dbname USING CODESET UTF-8 TERRITORY CN"。可以在连库后,使用db2 get db cfg for dbname命令,来查看Database code page/set的值。

本问题中数据库级的字符集是1386,即GBK字符集;终端实例级的字符集也是1386字符集。但是,SQL脚本是UTF-8格式的,db2按照1386字符集去读取UTF-8格式的脚本就会出现不可识别的乱码,最终报错SQL0010N。
解决办法是临时修改实例级字符集为UTF-8格式,执行完脚本后再恢复为GBK格式。
db2 connect to dbname
db2set db2codepage=1208
db2 terminate
db2 connect to dbname
db2 -tvf *.sql  //执行sql脚本
db2set db2codepage=1386
db2 terminate
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值