OracleDBにおける日本語の文字列格納用カラムのデータ型について
OracleDB(11g)を利用することになり、日本語文字列を格納するカラムのデータ型をどうすればよいか悩んで調べたので、自身の備忘録として。
データ型の選択肢
例えば20文字の文字列を格納するカラムとした場合
- VARCHAR2(20 CHAR)
- NVARCHAR2(20)
※ VARCHAR型の CHAR は、BYTE数カウントではなく文字数カウントであるという指定。
検討要素
1. Charset
データ型 | Charset |
---|---|
VARCHAR2 | DatabaseのCharset依存 |
NVARCHAR2 | Unicodeのみ(Oracleを含む大抵のDBではUTF-16でエンコードする) |
システム要件として、使用するキャラセットに制限がある場合はそれに従うのが吉。
2. サロゲートペア文字
データ型 | サロゲートペア1文字の扱い |
---|---|
VARCHAR2 | VARCHAR(1)に格納可能 |
NVARCHAR2 | 2文字として扱われるため、NVARCHAR(1)には格納できない |
人名など(他は思いつかないが)で、一般的ではない漢字であってもそのまま扱わないといけない場合は、VARCHAR2にしておくほうが吉。
一般的な漢字のみを格納する前提であればどちらでも。
3. バイト数
データ型 | 1文字のバイト数の扱い |
---|---|
VARCHAR2 | 1~4バイト(一般的な全角文字は3バイト) |
NVARCHAR2 | 2または4バイト(一般的な全角文字は2バイト) |
全角文字が多く格納される場合は、NVARCHAR2の方がバイト数が少なくなる。
半角文字の数値やアルファベットが多く格納される場合は、VARCHAR2の方がバイト数が少なくなる。
DB容量のシビアな問題があれば考慮すべきだが、そこまでギリギリの環境自体がそもそも良くない。
参考URL
Author And Source
この問題について(OracleDBにおける日本語の文字列格納用カラムのデータ型について), 我々は、より多くの情報をここで見つけました https://qiita.com/kariyaitaru/items/4b245326e839186a5034著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .