NVARCHAR 型の定義で長さを省略したら?

NVARCHAR 型の長さを定義しなかったらどうなる?

NVARCHAR 型の変数を宣言したり、CAST や CONVERT で NVARCHAR 型にデータを変換したりする時のお話です。

通常、例えば最大 8 文字の値しか入らないのであれば、NVARCHAR(8) のように、NVARCHAR の後ろにその文字列の最大の長さを指定して宣言すると思います。

この長さですが、オプショナルなので、指定しなくてもエラーにはなりません。

では、長さを指定しないで NVARCHAR を宣言した場合、長さはどうなるのでしょうか?


残念ながら、どんな長さでも入る訳ではなく、変数の宣言の場合は長さは 1、CAST や CONVERT の場合は長さは 30 になります。


まずは変数の宣言の場合。 長さなしで宣言した NVARCHAR 型の変数に、ABCDEFGHIJKLMN をセットしても、長さが 1 なので 「 A 」 になってしまいます。

NVARCHAR 型の定義で長さを省略1


まずやらないと思いますが、テーブルの宣言でも、NVARCHAR の長さを指定しないと、以下のように長さが 1 になります。

NVARCHAR 型の定義で長さを省略2


そしてこちらが、CAST や CONVERT のケースです。 40 桁の文字列を指定して変換しましたが、30 桁になってしまっていますね!

NVARCHAR 型の定義で長さを省略3

© 2010-2024 SQL Server 入門