UTF-8の場合、一文字を1~4バイトとして通常は認識する。日本語は大体3バイト。
しかし、結合文字(㋿、👨👨👦👦など)や第三、四水準漢字(伃、丩などの常用漢字でないもの)は複数の文字で構成されているので、4バイトとなる。
上記のような、複数の文字(コードポイント:文字コードのようなもの)で構成されている文字をサロゲートペアという。
UTF-8ではサロゲートペアが考慮されていないので、バラバラに表示される事がある。
しかし、UTF-16ではサロゲートペアが考慮されているため、問題がないことが多い。
文字のデータ型について
結構よく使うけれど、ついつい忘れがちなのが
char、varchar、nchar、nvarcharの取り扱い方の違い。
すごく簡単に説明すると
- char→文字数固定。全角非推奨。
- varchar→文字数可変(最大の文字数は固定)。全角非推奨。
- nchar→文字数固定。全角半角関係なし。
- nvarchar→文字数可変(最大の文字数は固定)。全角半角関係なし。
由来について
意外と説明されていないことが多い由来についてです。
nとはNational(固有の)
varとはvariable(可変の)
char(文字)はそのままですね。
なので、さっきのを日本語訳してみましょう。
- char→文字
- varchar→可変の文字
- nchar→固有の文字
- nvarchar→固有で可変の文字
なんだか意味が一気に覚えられるような気がしませんか?
日本語はかなり難しく、漢字は絵文字と同じようなバイトの計算方法なのでかなりエラーが起きるときがあります。
バイト数でチェックしていると、たまに罠に落ちることがありますので、気をつけましょう。
簡単なことを言うと、基本nvarcharを使用しておけば問題ないです!(そんなことないです。)