NVARCHAR 型の定義で長さを省略したら?
NVARCHAR 型の長さを定義しなかったらどうなる?
NVARCHAR 型の変数を宣言したり、CAST や CONVERT で NVARCHAR 型にデータを変換したりする時のお話です。
通常、例えば最大 8 文字の値しか入らないのであれば、NVARCHAR(8) のように、NVARCHAR の後ろにその文字列の最大の長さを指定して宣言すると思います。
この長さですが、オプショナルなので、指定しなくてもエラーにはなりません。
では、長さを指定しないで NVARCHAR を宣言した場合、長さはどうなるのでしょうか?
残念ながら、どんな長さでも入る訳ではなく、変数の宣言の場合は長さは 1、CAST や CONVERT の場合は長さは 30 になります。
まずは変数の宣言の場合。 長さなしで宣言した NVARCHAR 型の変数に、ABCDEFGHIJKLMN をセットしても、長さが 1 なので 「 A 」 になってしまいます。
まずやらないと思いますが、テーブルの宣言でも、NVARCHAR の長さを指定しないと、以下のように長さが 1 になります。
そしてこちらが、CAST や CONVERT のケースです。 40 桁の文字列を指定して変換しましたが、30 桁になってしまっていますね!