Oracle データベースの文字セットを UTF-8 (AL32UTF8) に変更した後、(インポートの実行中に) 一部のテーブルのいくつかのレコードが拒否される
文字セットが UTF-8 に変更され、同じデータ ダンプが再ロードされて、アラビア語の文字がサポートされるようになりました。
インポート ログによってスローされるエラーは次のとおりです。
ORA-12899: 列"DATABASE"."TABLE"."ATTRIBUTE"の値が大きすぎます(実際: 73、最大: 64)
Oracle データベースの文字セットを UTF-8 (AL32UTF8) に変更した後、(インポートの実行中に) 一部のテーブルのいくつかのレコードが拒否される
文字セットが UTF-8 に変更され、同じデータ ダンプが再ロードされて、アラビア語の文字がサポートされるようになりました。
インポート ログによってスローされるエラーは次のとおりです。
ORA-12899: 列"DATABASE"."TABLE"."ATTRIBUTE"の値が大きすぎます(実際: 73、最大: 64)
ベンのコメントはおそらく正しいでしょう。最初に 60 文字の文字列があった場合、1 バイト エンコーディングで 60 バイトのスペースが必要であり、VARCHAR2(64) に適合します。
マルチバイト エンコーディング UTF-8 では、同じ文字列が 73 バイトを使用するようになり、VARCHAR2 宣言のデフォルトの単位が文字ではなくバイトであるため、VARCHAR2(64) に収まりません。
すべての文字列を次から変更する必要があります。
VARCHAR2(64)
に:
VARCHAR2(64 CHAR)
検証では、文字列が収まるかどうかを予測することはほとんど不可能であるため、バイト単位の長さ宣言を使用しないことを強くお勧めします。たとえば、入力を 40 文字に制限する HTML テキスト フィールドを定義するのは簡単です。これはまさにこの目的のための属性があるためです。しかし、エントリを UTF-8 エンコーディングで測定した 40 バイトに制限するために同じものを作成するのは非常に困難です。とにかく、それをどのようにユーザーに伝えたいですか? ( UTF-8エンコーディングで計測した場合、40バイトを超える名前は入力できません。 )