- 論壇徽章:
- 0
|
數(shù)據(jù)文件如下:
TESTPF
AF CHAR 200 CCSID 37 ( 200A)
VALUE: '一堆簡(jiǎn)體中文加數(shù)字12345加字母abcde的值'
TESTPF2
AF CHAR 200 CCSID 935 (200O)
對(duì)TESTPF 在AS400上通過SQL,QRY讀寫均能正確識(shí)別為中文。
但通過TTO或者ODBC/JDBC下載時(shí),將會(huì)被識(shí)別為亂碼。
以往解決亂碼問題時(shí),往往是通過CHGPF命令,將TESTPF的AF字段修改為O型(CCSID 935)。或者創(chuàng)建一個(gè)TESTPF2,通過CPYF命令將TESTPF的內(nèi)容拷貝到TESTPF2,通過FMTOPT(*NOCHK)參數(shù)自動(dòng)轉(zhuǎn)碼來完成。當(dāng)然也可以在JDBC中通過反射機(jī)制修改字段的CCSID值來自動(dòng)轉(zhuǎn)碼。但以上方法都存在缺陷,要么需要對(duì)原始數(shù)據(jù)表進(jìn)行修改,要么需要額外的存儲(chǔ)空間,需要能創(chuàng)建新的PF或者修改PF的權(quán)限,要么只能定做轉(zhuǎn)碼方法(JDBC反射方法)。
現(xiàn)發(fā)現(xiàn)一個(gè)新的方法,直接通過SQL方式自動(dòng)轉(zhuǎn)碼。方法如下:
SELECT CAST(AF AS CHAR(200) CCSID 935) FROM(
SELECT CAST(AF AS CHAR(200) CCSID 65535) FROM TESTPF
) AS TESTPF
通過以上方法,就能將CCSID為37的字段的通過SQL方法轉(zhuǎn)碼為935并正確輸出。
以上方法中如果去掉先將37轉(zhuǎn)為65535的操作(CAST(AF AS CHAR(200) CCSID 65535))的話,轉(zhuǎn)碼出來的結(jié)果將不正確,會(huì)出現(xiàn)部分中文字符轉(zhuǎn)碼成功,部分失敗的情況。
但如果通過先轉(zhuǎn)為65535方法后再轉(zhuǎn)為935,則能正確轉(zhuǎn)換。
CAST的詳細(xì)說明
AS400-SQL-CAST-01.png (13.66 KB, 下載次數(shù): 33)
下載附件
2013-11-12 14:31 上傳
AS400-SQL-CAST-02.png (42.04 KB, 下載次數(shù): 33)
下載附件
2013-11-12 14:31 上傳
AS400-SQL-CAST-03.png (14.43 KB, 下載次數(shù): 35)
下載附件
2013-11-12 14:31 上傳
詳情見SQL reference
|
|