SQLのNプレフィックスっていったい何?

データベースを触ってるとnvarcharとかncharってvarcharとcharとどう違うの?って疑問に思いませんでしたか?
SQLを書いていても謎のNが出現したり、これなに?って思ったりしません?

INSERT INTO TABLE ("ID", "NAME") VALUES ('1', N'ほげほげ');

このNが一体何なのかというと、Unicodeを使うよっていうマーキングです。

Unicode の方が広範な文字をサポートします。

Unicode 文字の方が格納に多くの記憶域を必要とします。

char 型列と varchar 型列の最大サイズは 8,000 文字であるのに対し、nchar 型列の最大サイズは 4,000 文字です。

nvarchar 型列の最大サイズは、2^31 バイトで、max 指定子を使用して指定します。nvarchar(max) の詳細については、「大きな値のデータ型の使用」を参照してください。

Unicode 定数は先頭に N を付けて指定します。つまり、「N’Unicode 文字列’」と指定します。

Unicode データは Unicode 標準により規定された文字セットを使用します。Unicode 列に使われる Unicode 照合順序は、大文字と小文字の区別、アクセントの区別、かなの区別、文字幅の区別、バイナリなどの属性を基に指定されます。

Unicode データの使用

NがUnicodeの意味なのは理解しましたが、じゃあ何故UじゃなくてNなんだろう?

元ページがすでに見られない状態なので引用の引用になりますが、National Languageという意味でUnicodeが採用されているため、Nというプレフィックスのようです。このNational Languageは国語という意味ではなく「様々な国の文字」というニュアンスと思います。

SQL Server で Unicode 文字列定数を扱う場合には、Unicode 文字列の前に大文字の N が必ず必要です。これは、SQL Server Books Online の「Unicode データの使用」で説明されています。”N” プレフィックスは、SQL-92 標準の National Language を意味し、必ず大文字にする必要があります。Unicode 文字列定数の前に N を付加しない場合、その文字列は、SQL Server によって、使用される前に現在のデータベースの Unicode 以外のコード ページに変換されます。

コメント