簡體   English   中英

perl DBIx :: Class用umlaut轉換值

[英]perl DBIx::Class converting values with umlaut

我正在使用DBIx::Class從Oracle(11.2)中獲取數據。 當獲取數據時,例如"Alfred Kärcher"其返回值為"Alfred Karcher" 我嘗試添加$ ENV NLS_LANG和NLS_NCHAR,但仍然沒有任何更改。

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

看起來像Oracle客戶端庫正在轉換數據。

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

也可以通過設置ora_(n)charset參數來實現。

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

您不需要use utf8; 在腳本中,但請確保將STDOUT設置為UTF-8編碼: 使用編碼'utf8';

這里的問題是您為存儲指定的列數據類型

您將列數據庫指定為VARCHAR2(10),則對於oracle,實際上存儲了10個字節,對於英語,10個字節表示10個字符,但是如果您插入到列中的數據包含某些特殊字符(如umlaut),則需要2個字節。 那么您最終得到RA-12899:VALUE的FOR列太大。 因此,如果您要插入用戶提供的,來自不同國家的列中的數據,請使用VARCHAR2(10 char)

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM