2014-07-02 57 views
0

我使用DBIx::Class從Oracle(11.2)提取數據。當數據提取時,例如"Alfred Kärcher"其返回值爲"Alfred Karcher"。我試圖添加$ ENV NLS_LANG和NLS_NCHAR,但仍然沒有改變。perl DBIx :: Class轉換值與元音變音

我還使用utf8模塊來驗證數據是否是utf8編碼的。

+0

看看https://metacpan.org/pod/DBD::Oracle#ora_charset-ora_ncharset和https://metacpan.org/pod/DBD::Oracle#UNICODE,這可能會有用。 – DavidEG

回答

0

這看起來像是轉換數據的Oracle客戶端庫。

確保數據庫編碼設置爲AL32UTF8和環境變量NLS_LANGAMERICAN_AMERICA.AL32UTF8

也可以通過設置ora_(n)字符集參數來代替。

來自DavidEG的兩個鏈接包含使其工作所需的所有信息。

你不需要在你的腳本use utf8;但一定要設置標準輸出爲UTF-8編碼:use encoding 'utf8';

0

這裏的問題是,你的存儲

指定的列數據類型你列數據庫指定爲VARCHAR2(10),那麼對於oracle,實際存儲10個字節,對於英文10個字節則表示10個字符,但是如果插入到列中的數據包含某些特殊字符(如變音符號),則需要2個字節。那麼你最終會得到RA-12899:VALUE對於列來說太大了。 因此,如果您插入到用戶和來自不同國家/地區的列中的數據然後使用VARCHAR2(10個字節),則使用VARCHAR2(10個字節)

以字節爲單位:VARCHAR2(10個字節)。這將支持最多10個字節的數據,在多字節字符集中可能少至兩個字符。

字符:VARCHAR2(10個字符)。這將支持最多10個字符的數據,這可能是多達40個字節的信息。