none
データ型 nvarchar varchar char の使い分けについて RRS feed

  • 質問

  • データ型 nvarchar varchar charは、どのように使い分けたらよいでしょうか。
    例などがありましたら、ご教授願えますか?
    2010年2月8日 14:14

回答

  • こんにちは、nagino です。

    こちらでは開発者の方が多いようですので、とりあえず開発者の視点で初歩的な内容としては以下の認識で良いかと思います。

    ●char
     固定長の半角文字列を格納。
     (数字ですが)JAN コードや、空港コードなど。

    ●nchar
     固定長の全角文字列を格納。
     いい例が思いつきませんが、例えば会社の部署全てに漢字 2 文字の略称(営管、開1、等)を付与している場合。

    ●varchar
     可変長の半角文字列を格納。
     英語の商品名や、ローマ字の氏名など。

    ●nvarchar
     可変長の全角文字列を格納。
     日本語の商品名や漢字の氏名、日本語でのメモなど、日本語環境では使用頻度が高いと思われます。

    名称は、以下のような規則になっています。
     char/nchar ⇒ 固定長
     varchar/nvarchar ⇒ 可変長
     n付 ⇒ Unicode 対応(全角文字がある場合に推奨)
     n無 ⇒ ASCII 対応(半角英数字記号)

    もう少し細かい話ですと、以下が参考になるかと思います。
    http://technet.microsoft.com/ja-jp/library/ms176089.aspx (char および varchar)
    http://technet.microsoft.com/ja-jp/library/ms186939.aspx (nchar および nvarchar)
    http://technet.microsoft.com/ja-jp/library/ms175055.aspx (char 型と varchar 型のデータの使用)
    http://technet.microsoft.com/ja-jp/library/ms191200.aspx (Unicode データの使用)

    ※「Unicode データの使用」の末尾にある「次の点を除き、nchar、nvarchar、ntext は、それぞれ char、varchar、text と同じです。」以下の箇条書きで、5 番目に記載されている以下の内容が実は大事だったりします。
    > Unicode 定数は先頭に N を付けて指定します。つまり、「N'Unicode 文字列'」と指定します。
    はじめのうちは理屈はともかく、そういうルールだと覚えておいてください。

    さらに細かい話をすると、varchar でも日本語は(確か) Shift-JIS で格納されるので日本語が不可というわけではなかったりするなど色々ありますが、深入りしだすと意外と奥が深かったりします。

    他には、DBA の視点からするとページ分割やインデックス、パフォーマンス等々の観点からの知識が別途必要になるかと思いますし、視点によって必要とされる知識は若干異なると思いますが、先ずは上記がスタートとしては良いかと思います。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク Rcbkv 2010年2月9日 12:16
    • 回答としてマークされていない Rcbkv 2010年2月9日 12:23
    • 回答としてマーク Rcbkv 2010年2月10日 14:25
    2010年2月8日 23:49

すべての返信

  • こんにちは、nagino です。

    こちらでは開発者の方が多いようですので、とりあえず開発者の視点で初歩的な内容としては以下の認識で良いかと思います。

    ●char
     固定長の半角文字列を格納。
     (数字ですが)JAN コードや、空港コードなど。

    ●nchar
     固定長の全角文字列を格納。
     いい例が思いつきませんが、例えば会社の部署全てに漢字 2 文字の略称(営管、開1、等)を付与している場合。

    ●varchar
     可変長の半角文字列を格納。
     英語の商品名や、ローマ字の氏名など。

    ●nvarchar
     可変長の全角文字列を格納。
     日本語の商品名や漢字の氏名、日本語でのメモなど、日本語環境では使用頻度が高いと思われます。

    名称は、以下のような規則になっています。
     char/nchar ⇒ 固定長
     varchar/nvarchar ⇒ 可変長
     n付 ⇒ Unicode 対応(全角文字がある場合に推奨)
     n無 ⇒ ASCII 対応(半角英数字記号)

    もう少し細かい話ですと、以下が参考になるかと思います。
    http://technet.microsoft.com/ja-jp/library/ms176089.aspx (char および varchar)
    http://technet.microsoft.com/ja-jp/library/ms186939.aspx (nchar および nvarchar)
    http://technet.microsoft.com/ja-jp/library/ms175055.aspx (char 型と varchar 型のデータの使用)
    http://technet.microsoft.com/ja-jp/library/ms191200.aspx (Unicode データの使用)

    ※「Unicode データの使用」の末尾にある「次の点を除き、nchar、nvarchar、ntext は、それぞれ char、varchar、text と同じです。」以下の箇条書きで、5 番目に記載されている以下の内容が実は大事だったりします。
    > Unicode 定数は先頭に N を付けて指定します。つまり、「N'Unicode 文字列'」と指定します。
    はじめのうちは理屈はともかく、そういうルールだと覚えておいてください。

    さらに細かい話をすると、varchar でも日本語は(確か) Shift-JIS で格納されるので日本語が不可というわけではなかったりするなど色々ありますが、深入りしだすと意外と奥が深かったりします。

    他には、DBA の視点からするとページ分割やインデックス、パフォーマンス等々の観点からの知識が別途必要になるかと思いますし、視点によって必要とされる知識は若干異なると思いますが、先ずは上記がスタートとしては良いかと思います。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク Rcbkv 2010年2月9日 12:16
    • 回答としてマークされていない Rcbkv 2010年2月9日 12:23
    • 回答としてマーク Rcbkv 2010年2月10日 14:25
    2010年2月8日 23:49
  • かなり前にあがいた気が・・・(^^;

    SqlServerでの日本語定数の使用
    http://www.microsoft.com/japan/msdn/archive/community/gdn/ShowPost-19154.htm

    ここは専門家の方もご覧になっていらっしゃいますので、上のGDNJの私の過去の書き込みに突っ込んでいただけるのは大歓迎です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク Rcbkv 2010年2月9日 12:15
    • 回答としてマークされていない Rcbkv 2010年2月9日 12:16
    2010年2月9日 2:16
  • nvarchar では、Unicode が使用できますが、 varchar では Unicode が使用できません。
    JIS2004 や 複数の言語の文字を使用される場合は、 Unicode 文字が使用できる nchar/nvarchar 型を使用されてはどうでしょう。
    SJIS のみしか使用しないのであれば、char/varchar でも問題ないと思います。

    2010年2月9日 2:43
  • ご連絡遅くなりました・
    とても参考になりました。ありがとうございました。
    2010年2月10日 14:27