A5でインポートする際に、下記のようなエラーが発生しました。
<エラーメッセージ:>
ORA-12899 列”schemaA”.“tableA”."columnA"の値が大きすぎます(実際:31、最大:21)
補足:インポートしようとするデータはA5でエクスポートしたもので、実行不能は不思議ですね!
問題のcolumnAについて、
定義 char(21)
実データ あいうえお+[16個半角スペース]
⇒utf8なので、5文字*3バイト+16スペース=31バイト
ヒント:上記の定義のchar(21)は21文字ではなく、21バイトとしてA5に認識されてしまうと疑います。
解説(20240731 追記)
よくある誤解は、char(n) と varchar(n) では、n によって文字数が定義されると考えられていることです。 ただし、char(n) と varchar(n) では、n によって文字長がバイト (0-8,000) で定義されます。 n は、格納できる文字数を定義しません。 この概念は、 nchar と nvarchar の定義に似ています。
1 バイト エンコードを使用する場合、char および varchar のストレージ サイズは n バイトであり、文字数も n であるため、誤解が生じます。 しかしながら、UTF-8 などのマルチバイト エンコードの場合、より高い Unicode 範囲 (128 - 1,114,111) では 1 文字に 2 バイト以上が使用されることになります。 たとえば、char(10) として定義された列では、データベース エンジンで格納できる文字は、1 バイト エンコード (Unicode 範囲 0 - 127) を使用する場合は 10 文字ですが、マルチバイト エンコード (Unicode 範囲 128 - 1,114,111) を使用する場合は 10 文字未満です。 Unicode の格納と文字の範囲の詳細については、「UTF-8 と UTF-16 でのストレージの相違点」を参照してください。
解決策:
インポートする際、余計なスペースを削除します。
これで、インポートは正常に行います。
コメント欄