- 論壇徽章:
- 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上通過(guò)SQL,QRY讀寫(xiě)均能正確識(shí)別為中文。
但通過(guò)TTO或者ODBC/JDBC下載時(shí),將會(huì)被識(shí)別為亂碼。
以往解決亂碼問(wèn)題時(shí),往往是通過(guò)CHGPF命令,將TESTPF的AF字段修改為O型(CCSID 935);蛘邉(chuàng)建一個(gè)TESTPF2,通過(guò)CPYF命令將TESTPF的內(nèi)容拷貝到TESTPF2,通過(guò)FMTOPT(*NOCHK)參數(shù)自動(dòng)轉(zhuǎn)碼來(lái)完成。當(dāng)然也可以在JDBC中通過(guò)反射機(jī)制修改字段的CCSID值來(lái)自動(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è)新的方法,直接通過(guò)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
通過(guò)以上方法,就能將CCSID為37的字段的通過(guò)SQL方法轉(zhuǎn)碼為935并正確輸出。
以上方法中如果去掉先將37轉(zhuǎn)為65535的操作(CAST(AF AS CHAR(200) CCSID 65535))的話,轉(zhuǎn)碼出來(lái)的結(jié)果將不正確,會(huì)出現(xiàn)部分中文字符轉(zhuǎn)碼成功,部分失敗的情況。
但如果通過(guò)先轉(zhuǎn)為65535方法后再轉(zhuǎn)為935,則能正確轉(zhuǎn)換。
CAST的詳細(xì)說(shuō)明
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 上傳
詳情見(jiàn)SQL reference
|
|