2012-04-23 71 views
0

使用jdbc(jt400)將數據插入到as400表中。 db表代碼頁是424. Host Code Page 424AS400 jdbc字符轉換

ebcdic 424代碼頁不支持許多可能來自客戶端的字符。 例如標記(Ascii 26 Hex 1A)

結果是不正確的翻譯。

有沒有在工具箱中的任何內置的方式來刪除任何不支持的字符?

回答

0

你可以嘗試在你的ccsid424物理文件上用不同的代碼頁創建一個邏輯文件。通過添加關鍵字CCSID(<num>),as/400可以爲各個列創建具有不同代碼頁的邏輯文件。您甚至可以將其設置爲unicode字符集,例如用於UTF-16的CCSID(1200)。當然你的物理文件仍然只能存儲424代碼頁中的字符,而這些字符將被一些無效的字符char替代,但翻譯可能會更好。

有沒有方法來存儲字符,不在代碼頁424在與該代碼頁直接列(我能想到的唯一的辦法就是與多個字符以某種方式編碼它們,但是這是最有可能什麼你想這樣做,因爲它會帶來比「解決」更多的問題)。

如果你對這個系統有控制權,而且有可能做一些更大的改變,你可以用相反的方法做到這一點:用不同的名字創建一個新的物理文件的unicode版本(我建議CCSID (1200),這與as/400 afaik上的UTF-16差不多,根據我的經驗,系統的所有部分都不支持UTF-8。比將舊文件中的所有數據傳輸到新文件,刪除舊文件(在此之前,備份它!),並在新物理文件上創建一個邏輯文件,並使用舊物理文件的名稱。在該邏輯文件中,將所有帶有ccsid的列從1200更改爲424.這樣,現有程序仍可以處理數據。當然,一旦插入不在ccsid 424的子集中的數據,邏輯文件中就會出現無效字符;所以你很可能不得不看看所有使用新邏輯文件的程序。