Oracle

從 sqlplus 插入時出現 ORA-12899,但使用 jdbc 可以

  • January 10, 2014

將 ‘ééééé’ 插入定義為 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

引用自:https://dba.stackexchange.com/questions/56540