テーブルをデータ型で説明する場合、とnvarchar
の違いは何ですか? 私はそれが常に二重であることがわかります。たとえば、値は、精度は 64、長さは 128 です。Precision
Length
Length
nvarchar(64)
CREATE TABLE T(X nvarchar(64))
EXEC sp_columns 'T'
テーブルをデータ型で説明する場合、とnvarchar
の違いは何ですか? 私はそれが常に二重であることがわかります。たとえば、値は、精度は 64、長さは 128 です。Precision
Length
Length
nvarchar(64)
CREATE TABLE T(X nvarchar(64))
EXEC sp_columns 'T'
精度は、テキスト データには意味がありません。
Size
Length プロパティについては、列のサイズ (バイト単位) である SQL Server Management Studio によって報告されるものと混同していると思います。列のは 64 ですがLength
、128 です。nvarchar(64)
Size
Unicode は各文字に 2 バイトを使用するため、Unicode 型 (nchar、nvarchar) のサイズは文字数の 2 倍になります。
これらの値を取得するには、LEN関数を使用して文字数を取得し、DATALENGTH関数を使用してバイト数を取得します。
select len(N'some value'), datalength(N'some value')
返す10 20
編集
あなたのコメントから、sp_columnsを使用してテーブルのスキーマ情報を取得していることがわかります。カタログ ストアド プロシージャは使用せず、代わりにカタログ ビューを使用してください。
ドキュメントに記載されているように、カタログ ストアド プロシージャは ODBC アプリケーションをサポートするために使用されるため、その結果は限られており、解釈が必要になる場合があります。sp_columns
たとえば、文字とデータの長さを区別しません。
INFORMATION_SCHEMAやsysスキーマのようなスキーマ ビューは、詳細で明確な情報を返します。たとえば、INFORMATION_SCHEMA.COLUMNSCHARACTER_MAXIMUM_LENGTH
は文字の長さを に、バイト サイズを に返しますCHARACTER_OCTET_LENGTH
。また、 によって返されない照合および文字セット情報も含まれますsp_columns
。
ビューはINFORMATION_SCHEMA
ISO によって定義されているため、列が計算列であるか、ファイルストリームに格納されているか、レプリケートされているかなど、SQL Server 固有の情報は含まれていません。この情報は、sys.columnsなどのシステム オブジェクト カタログ ビューを使用して取得できます。
NVARCHAR には精度がありません。10 進数には精度が使用されます。length は文字の長さです。
nvarchar [ ( n | 最大 ) ]
可変長の Unicode 文字列データ。n は文字列の長さを定義し、1 ~ 4,000 の値を指定できます。max は、最大ストレージ サイズが 2^31-1 バイト (2 GB) であることを示します。ストレージ サイズ (バイト単位) は、入力されたデータの実際の長さの 2 倍 + 2 バイトです。nvarchar の ISO シノニムは、国別文字可変および国別文字可変です。
ソースから:-
精度は、数値の桁数です。
数値データ型の長さは、数値を格納するために使用されるバイト数です。文字列または Unicode データ型の長さは文字数です
確かに、これは SQL サーバーの紛らわしいトピックであり、ドキュメンテーションにも一貫性がありません。
たとえば、CREATE TABLEの構文定義を参照してください。
<data type> ::=
[ type_schema_name . ] type_name
[ ( precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
ここには「長さ | 精度」は表示されませんが、精度のみが表示されます。また、他の人が指摘したように、ドキュメントの他の場所では、文字データ型について話すとき、長さと同じ属性を参照しています。sp_helpやコンパニオンのドキュメントなど、そうでない場合を除きます。
Length int Column length in bytes.
Prec char(5) Column precision.
Scale char(5) Column scale.
ここで length はストレージの長さです。(ほとんどの人はそれをサイズと呼ぶでしょう。)
残念ながら、あなたの質問に対する正しいまたは最終的な答えはありません。疑問がある場合は、常にコンテキストを考慮し、ドキュメントを参照する必要があります。
NVARCHAR
がなくprecision
、length
が文字長になります。次のSQLを試してください
SELECT LEN('Whats the length of this string?')
Numeric
これをまたはと混同している可能性があります。こちらの表Decimal
を参照してください