Oracle
從 sqlplus 插入時出現 ORA-12899,但使用 jdbc 可以
將 ‘ééééé’ 插入定義為 varchar(5) 的列中可以從 squirrel sql 客戶端 (jdbc) 正常執行。
但是從 sqlplus 執行相同的插入操作失敗並出現ORA-12899(值太長)。
NLS_CHARACTERSET 設置為AL32UTF8
NLS_LENGTH_SEMANTICS 設置為CHAR
看起來 sqlplus 不遵守這些設置…
我應該去哪裡看?
我有相同的字元集:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
結果:
VALUE ----------- AL32UTF8
我已
NLS_LENGTH_SEMANTICS
設置為BYTE,但我可以通過這種方式覆蓋此選項:CREATE TABLE encoding (name VARCHAR2(5 CHAR)); INSERT INTO encoding VALUES('ééééé'); 1 row created.
我的NLS_LANG是:
AMERICAN_AMERICA.UTF8
,因為我的伺服器是 UTF8 編碼的。但是如果我取消設置這個環境變數:unset NLS_LANG
如果我再試一次:
INSERT INTO encoding VALUES('ééééé'); ORA-12899; value too large for column "..."."..."."...." (actual: 10, maximum: 5)
所以,你可以嘗試設置你的
NLS_LANG
變數,它的格式是[NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]
它會起作用。您可以從 獲取此參數
NLS_DATABASE_PARAMETERS
。