CCSID 开关是否会出现任何已知问题?

Will there be any known problems from CCSID switch?

我不熟悉 db2/iSeries,但是我正在努力让来自多种语言的字符存储在 db2 table 中。 将 db2/iSeries table 中的列从 CCSID 37 更改为 1208 是否存在任何明显问题?切换 CCSID 将如何影响列中已存储的数据?

您会看到一些可怕的消息:

CREATE TABLE QTEMP/TEST (FLD1 CHAR (10 ) CCSID 37 NOT NULL WITH DEFAULT) 

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE CHARACTER (  
10) CCSID 1208 NOT NULL WITH DEFAULT  

CPD32CC - Change to field FLD1 may result in data loss.
--reason code 02: 02 - The new length is shorter than the current length.
CPA32B2 - Change of file TEST may cause data to be lost. (C I)
SQL0460 - Truncation of data may have occurred for ALTER TABLE of TEST in QTEMP.

但假设数据是 alpha,你不应该丢失任何东西。

但是,尝试存储需要 DBCS 编码的 10 个字符的字符串将失败,因为列长度仍然只有 10 个字节...并且您需要 22 个字节来存储 CCSID 1208 中的 10 个字符的 DBSC 字符串。 (尽管有关截断的消息不会消失,除非您将长度增加到 28?)

如果改成NCHAR类型,使用UTF-16(CCSID 1200),系统自动识别10为字符长度,分配20个字节存储。

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE NCHAR(10) NOT NULL WITH DEFAULT 

也就是说,假设您的文件是现有应用程序的一部分,更改 table 只是问题的开始。

现有的 RPG 程序必须重新编译并且很可能会被修改。

您可以通过使用从 Unicode 转换为 EBCDIC 的 LF(视图)层来绕过该要求。这有助于当前数据。但对实际需要 unicode 的新数据没有帮助。

另外,IBM iAccess for Windows 中包含的较旧的 5250 模拟器不支持 unicode。您需要使用较新的 Access Client Solution (ACS) 模拟器或基于浏览器的 IBM iAccess for Web。