2013-03-20 34 views
0

因此,出於一些傳統原因,我們有一個帶有NLS_CHARACTERSET = WE8MSWIN1252的Oracle數據庫。現在我們要將CJK字符存儲到VARCHAR2字段中。這是可能的,如果是這樣,我需要做些什麼來實現這一點? PS:由於產品已發佈,因此更改NLS_CHARACTERSET將不再有問題。使用默認的NLS_CHARACTERSET設置在Oracle中存儲utf-8字符

編輯

到目前爲止,我們已經提出了這樣一個想法: 因爲我們打破它到它的UTF-8字節表示每個CJK字符,然後存儲字節順序到數據庫中。作爲回報,我們將它們重組爲一個CJK字符。例如,中文字符將爲0xe4, 0xb8, 0xad,所以我們改爲存儲3個字節。

但是,這種方法似乎不能正常工作。如果我們在字節中存儲中文字符,即0xe5, 0x8d, 0x8e,則數據庫中將變爲0xe5, 0xbf, 0x8e

我們正在使用Java語言,不知道這是否與結果有關。

回答

0

不正確,沒有。如果數據庫的字符集是Windows-1252,則可以正確存儲在VARCHAR2列中的唯一字符是存在於Windows-1252字符集中的字符。

如果NLS_NCHAR_CHARACTERSET是Unicode(通常爲AL16UTF16),那麼您可以創建一個NVARCHAR2列並將CJK字符存儲在該新列中。您的應用程序可能需要更改代碼才能支持NVARCHAR2列。

+0

謝謝賈斯汀你的答案。我已經添加了我們目前的方法(雖然沒有正常工作),請您幫忙檢查一下,比方說,如果它(接近)正確的方式? – 2013-03-20 07:34:08