【Oracle】文字数とバイト数を調べるSQL(ORA-12899)

こんにちは、カメ助(@kamesuke_blog)です。

業務でOracleのカラムサイズを拡張することがあり、実際のテーブルデータの文字数とバイト数を調べるSQLを作成したのでまとめておきます。Oracleユーザーの参考になれば嬉しいです。

バイト数以上のデータをDBに格納しようとすると、「ORA-12899: 列 string の値が大きすぎます(実際: string、最大: string)」のエラーが出ますので注意しましょう。

ORA-12899の対処方法を知りたい方は、以下にまとめていますのでお読みください。

【Oracle】ORA-12899: 列”XXX”の値が大きすぎます(実際: 5、最大: 4)の原因と対処方法

目次

テーブルデータから文字数とバイト数を調べるSQL

Oracleで文字列の長さとバイト数を取得するSQLは以下の通りです。

出力結果の例

[対象のカラム名]LENGTHLENGTHB
日本26
Japan55
カレンダー515
文字列長さとバイト数を取得するSQLの実行結果

出力結果より、半角1文字が1バイト、全角1文字が3バイトになっていることが分かります。例として、全角100文字の文字列を入力する必要がある場合は、カラムサイズを300 byte以上に設定する必要があります。 

固定文字列の文字数とバイト数を調べるSQL

先ほどの例では、テーブルデータを元に文字列の長さとバイト数を確認していましたが、手っ取り早く1文字当たりのバイト数を知りたい時もありますよね。

そんな時には、以下のSQLを使用してください。

出力結果

‘カメ助です’LENGTHLENGTHB
カメ助です515
文字列長さとバイト数を取得するSQLの実行結果

出力結果より、全角1文字が3バイトになっていることが分かりますね。(上記SQLの’カメ助です’は好きな文字に置換して使用してください。)

上記SQLの注意事項としてFROM dualはOracleでのみ使用可能なものです。(postgresqlなどではfrom句は不要です。)

まとめ

Oracleで文字列の長さとバイト数の取得方法についてまとめます。

Oracleの文字列に関する関数
  • 文字列の長さ  :LENGTH
  • 文字列のバイト数:LENGTHB

「LENGTH」、「LENGTHB」 は長さ0の文字列の長さは計れないので注意しましょう。

以上がOracleで文字列の長さとバイト数の取得方法でした。バイトサイズがオーバーしないように気を付けましょう!

SQLの勉強にはこの本がオススメですよ。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大阪でITエンジニアしています。(9年目に突入)
趣味でウェブサイトに関することをいろいろと勉強しています。

勉強した内容やプログラミングに関する情報を中心に役立つ情報を発信するべく日々ブログを更新しています。

3度の飯よりも「柿の種」をこよなく愛する関西人。

コメント

コメント一覧 (1件)

コメントする

目次