SQL Serverにおけるchar、nchar、varchar、nvarcharデータタイプの違い

By: Sherlee Dizon|更新日時 2016-06-14|コメント(4)|関連するもの 1|2|3|その他 > データ型

問題

SQL Serverのchar、nchar、varchar、nvarcharの違いについては、面接時だけでなく、開発者がデータベース設計について議論する際にもよく話題になります。 今回のヒントでは、基本的な違いだけでなく、それぞれのデータ型を使用する際に知っておくべきこと、注意すべきことを紹介したいと思います。

解決策

Char、nchar、varchar、nvarcharはすべて、SQL Serverのデータベースにテキストや文字列のデータを格納するために使用されます。

  • char – character の SQL-92 同義語です。 データはフィールドサイズを埋めるためにブランクやスペースでパディングされます。 固定長のデータタイプです。
  • nchar – national charとnational characterのSQL-92の同義語です、固定長のデータ型です。
  • varchar – 文字の可変性を表すSQL-92の同義語です。 可変長データ型です。
  • nvarchar – national char varyingとnationalcharacter varyingのSQL-92の同義語です。 可変長データ型です。

SQL ServerにおけるNの意味

Nが何を意味するのか疑問に思うかもしれません。 NはNational Language Character Setの略で、Unicodeの文字列を指定するのに使われます。 Unicodeデータ型を使用する場合、列にはUnicode規格で定義された任意の文字を格納することができますが、これにはさまざまな文字セットで定義されたすべての文字が含まれます。

Unicodeは、英語や西ヨーロッパのコードページを超えたコードページを容易に扱えるように設計されたデータベースアプリケーションで使用されます。

Unicodeは、英語や西ヨーロッパのコードページを超えるコードページを容易にするために設計されたデータベースアプリケーションで使用されます。これは、拡張された文字セットがデータベースのカラムに「フィット」するように設計されています。 SQL Serverは、SQL Server7.0以降、nchar/nvarchar/ntextデータ型を提供することで、Unicodeをサポートしています。

以下にクイックリファレンスとなる表を作成しましたのでご覧ください。

char、nchar.varchar、nvarcharの違い。 varchar, nvarcharの違い

Unicode/Non-Unicode文字

Unicode/Non-Unicode文字

データの長さが一定または固定長のカラムの場合に使用

d

r

char nchar varchar nvarchar
文字のデータ型 非Unicode固定長 Unicode固定長は、非UnicodeとUnicodeの両方の文字を格納することができます(例:日本語、韓国語など)。
ユニコード固定長 ユニコード固定長は、非ユニコードとユニコードの両方の文字(日本語、韓国語など)を格納することができます。
最大の長さ 最大8,000文字 最大4,000文字 最大8,000文字 最大4,000。000文字
文字サイズ 1文字あたり1バイトを占有 2バイトを占有 1文字あたり1バイトを占有 2バイトを占有 2バイトを占有 2バイトを占有 2バイトを占有。
ストレージサイズ nバイト 2倍のnバイト 実際の長さ(バイト) 2倍の実際の長さ(バイト)
用途 データの長さが一定の場合に使用。
使用 日本の漢字や韓国のハングル文字のようなUnicodeサポートが必要な場合にのみ使用 データの長さが可変または可変長のカラムで、実際のデータが常に容量よりかなり少ない場合に使用

charの長所と短所。

データタイプ メリット デメリット
char 更新時にカラムを移動する必要がないので、クエリのパフォーマンスが向上します。
文字列の長さを最後の2バイトに格納する必要がありません。
適切に使用されなければ、固定長であり、保存される文字列の長さがわからないので、varcharよりも多くのスペースを必要とします。
varchar 可変長であるため、より少ないメモリ容量で済みます。 一部のSQLクエリのパフォーマンスを低下させます。
nchar/nvarchar 異なるロケールを実行している多くのクライアントコンピュータをサポートしています。

Webアプリケーションの成長と革新に伴い、異なるロケールを実行しているクライアントコンピュータをサポートすることがより重要になってきています。 国際的なデータベースで文字データを管理する最も簡単な方法は、非ユニコードのchar、varchar、textではなく、常にユニコードのenchar、nvarchar、ntextのデータ型を使用することです。

Unicodeとは、コードポイントを文字にマッピングするための規格です。

Unicodeはコードポイントと文字を対応させるための規格で、世界中のすべての言語のすべての文字をカバーするように設計されているため、異なる文字セットを扱うために異なるコードページを作成する必要はありません。 SQL Serverは、Unicode Standard, Version 3.2をサポートしています。 国際的なデータベースを扱うすべてのアプリケーションが、非ユニコード変数ではなくユニコード変数を使用していれば、システムのどこかで文字の翻訳を行う必要はありません。 クライアントは他のクライアントと同じ文字をデータの中に見ることができます。

SQL Server は、すべてのテキストのシステム カタログ データを、Unicode データタイプを持つ列に格納します。 また、テーブル、ビュー、ストアド プロシージャなどのデータベース オブジェクトの名前は、Unicode の列に格納されます。 これにより、Unicode のみを使用してアプリケーションを開発することができ、コード ページ変換の問題を回避することができます。

新しいアプリケーションを開発する際には、そのアプリケーションがグローバルに使用されるかどうかを考慮することを忘れないでください。これは、異なる言語をサポートするために nchar と nvarchar を使用するかどうかを決定するのに役立ちます。

Next Steps

以下の記事を読んで、さらに理解を深めてください。

  • データベース設計の計画に役立つと思われるこのヒントも読んでみてくださいDefining Data Types and Sizes
  • データ型の一貫性の重要性についてもっと学んでくださいSQL Server Data Type Consistency
  • SQL Server と Oracle のデータ型を比較する
  • グローバルに展開する予定のアプリケーションがある場合、グローバル文字を使ってみてください。

最終更新日:2016-06-20 20:00 2016-06-14

get scripts

next tip button

筆者について
MSSQLTipsの著者Sherlee DizonSherlee DizonはITコンサルタントであり、ソフトウェアやWebアプリケーションの開発者として14年以上の経験を持っています。
全ての私のTipsを見る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です