尝试导出 table 时与 DB2 上的 CCSID 相关的问题

Issues related to CCSID on DB2 while trying to export a table

我一直在尝试将 table 从 db2 从一个外部源导出到另一个外部源,到目前为止,我注意到在尝试将其导入源 table 时出现错误.

我在 shell 脚本上使用它:

myDate=$(date +"%Y%m%d%I%M")
myPath=/tmp/test
myDataSource="external"
myTableName=tableSchema.sourceTable

db2 +w -vm "export to $myPath/$myDataSource.$myTableName.$myDate.ixf of ixf
    messages $myPath/$myDataSource.$myTableName.$myDate.ixf.xmsg
    SELECT * from $myTableName"

进一步调查,似乎插入了一个奇怪的字符“▒”。我检查了来源,没有任何奇怪的字符。所以在检查细节后我发出了这个命令:

select *
from SYSIBM.SYSCOLUMNS
where
    tbcreator = 'SOURCESCHEMA'
    and tbname = 'SOURCETABLE'
for fetch only with ur;

这表明源列上的 CCSID 是 37。我在目标模式上做了同样的事情,列的 CCSID 是 1208。

当我再次尝试导出 table 时强制它转换为 CCSID 1208 添加 修改代码页=1208:

db2 +w -vm "export to $myPath/$myDataSource.$myTableName.$myDate.ixf of ixf
    modified by codepage=1208
    messages $myPath/$myDataSource.$myTableName.$myDate.ixf.xmsg
    SELECT * from $myTableName"

这会导致脚本运行,但我收到此警告:

SQL3132W  The character data in column "COLUMN" will be truncated to size "4".

所述列在源和目标上的大小相同,但似乎由于 CCSID,我需要更改目标上的大小(我无法更改源上的任何内容和更改 CCSID目标会破坏目标上的东西)所以,我的问题是:

所以我不会丢失这些字符串的任何部分。

谢谢!

最后,我最终使用了这个

SELECT
    CAST(COLUMN AS VARCHAR(12) CCSID 1208) as COLUMN,
    CAST(COLUMN2 AS VARCHAR(12) CCSID 1208) as COLUMN2,
    (...),
    CAST(COLUMNM AS VARCHAR(12) CCSID 1208) as COLUMNM,
FROM tableSchema.sourceTable;

跨代码页转换,没有出现截断。