2013/10/18

Oracle 11gでは日本語1文字が3バイト

 いつもご覧いただき、ありがとうございます。
 この間Oracleの文字コードでひょんな事を耳にしましたので、少々書いてみます。
 題にも書きましたが、Oracle11gでは日本語1文字が3バイトになっているようです。
 このことは、次のサイトに記載されていました。

 SHIFT The Oracleマルチバイト

 文字コードの規定値がUTF-8になったことによるようなんですが、筆者の理解ではUTF-8では日本語文字コードは2バイトだと思い込んでいましたが、UTF-8では日本語コードは3バイトなんですね。

 UTF-8-Wikipedia

 UTF-8が運用されはじめて久しいのに、恥ずかしい限りです。

 ということで、UTF-8下で運用する場合、文字数で数えるVARCHAR,VARCHAR2は問題ないようですが、CHARはバイト数カウントするので注意が必要です。
 これらはシステム設計の根幹に影響するので、日本語が2バイト系の文字コードに変更したほうが良いと思います。

 次のサイトに文字コードの変更方法について記載されていました。

 oracle 11g XE でキャラクタセットを変更した時のメモ - おかぼんの備忘録的日記

 UTF-8はキャラクターセットが多いので導入したいところですが、少々考えないといけないことがあるようです。
 それでは。

2 コメント:

  1. CHARは文字数
    VARCHAR2がバイトです。

    返信削除
  2. ごめんなさい。間違いを書いてしまいました。
    Oracleの固定長文字列型「CHAR」ですが、サイズ指定にはバイトと文字数の両方が使えるんですね。しらんかった。

    返信削除

post