2009-05-28 7 views
3

データベースを設計するときに、nvarcharの大きさを決定する際にどのような決定をしますか。どのようにしてNvarchar()を作成しますか

私がアドレステーブルを作っていたのなら、私の嫌な反応は、アドレス行1が古いアクセスデータベースのようにnvarchar(255)になることでした。

私はこれを使用していることがわかりました。古い「文字列は切り捨てられます」と気になりました。私はこれが入力ボックスを制限することによって防ぐことができることを知っているが、ユーザーが本当に255を超えるアドレス行を持っているなら、これは許されるべきである。

どのくらい私は(????)

+0

要件仕様に準拠する必要がありますか? ;-) –

+1

私はあなたがスペックを作る人なら、それはあなたに下がると思う... – Paul

答えて

3

私の推奨事項:本当に必要な大きさにしてください。

など。郵便番号列の場合、10〜20文字で十分です。電話番号の場合は同意。電子メールは50-100文字以上の長さになる可能性があります。名前 - よく、私は通常、50文字で取得します。本当に必要な場合は、いつでも簡単にフィールドを拡張することができます。これは大きな仕事ではありません。

すべてのvarchar/nvarcharフィールドを可能な限り大きくすることは、実際には意味がありません。結局のところ、SQL Serverのページは固定されており、行あたり8060バイトに制限されています。 NVARCHAR(4000)の10個のフィールドを持つだけで問題が発生するのを尋ねています....(実際にあまりにも多くのデータを入力しようとすると、SQL Serverはあなたにバーフするでしょう)。

本当に大きなフィールドが必要な場合は、NVARCHAR/VARCHAR(MAX)を使用してください。ページに収まる限り、ページに格納され、余りに大きくなると「オーバーフロー」ストレージに送られます。

NVARCHARとVARCHAR:これは本当にあなたが本当に「エキゾチックな」文字(日本語、中国語、または他の非ASCIIスタイルの文字)を必要とするのではないかと思いますか?ヨーロッパでは、東ヨーロッパの文字でさえ、VARCHARフィールドではもはや表現できません(彼らはハシックを取り除かれますか?)?西ヨーロッパ言語(英語、ドイツ語、フランス語など)はすべて、 VARCHAR

しかし:。。?NVARCHARは2倍の領域を使用しない - それはです:-)しかし、本当にあなたを行う - ディスク上にして、SQL Serverのメモリに - すべての回であなたが本当にそれを必要とする場合は、あなたがそれを必要としますあなた次第。

マルクあなたは上の特定の制約を持っている必要があります列の場合

+1

私のアプリがロシア人によって使用されていたら、私はそれを必要とします。 ありがとう – Paul

3

私はいつもvarchar型を使用します:-)私は個人的にnvarchar型を使用していない私はnvarcharを行う必要があります。

ただし、私は名前に100、コメントに1000を使用する傾向があります。長い文字列をトラップして扱うことは、クライアントがregexを使って行うことができることです.SQLはそれが期待するデータのみを取得します。

たとえば、保存されたprocsを使用して、トランケーションエラーがコールをパラメータ化することを避けることができます。 パラメータがvarchar(200)と定義されている場合、> 200を送信すると、切り捨てが自動的に発生します。切り捨てエラーは、INSERTまたはUPDATE文に対してのみスローされます。

vacharは8000に変更さ255のSQL Server 7.0 +に限定し、Unicodeのサポートが追加されましたので、SQL Serverの255 "リミット" は6.5に戻っ

編集:

私がない理由nvarcharを使用してください:ダブルメモリフットプリント、ダブルインデックスサイズ、ダブルディスクサイズ、単純にそれを必要としません。私はグローバルなオフィスを持つスイスの大企業に勤めていますので、私は偏狭ではありません。

また、ここで議論:varchar vs nvarchar performanceさらに反射に

は、私はそれがどのような分野に依存

+0

なぜコメントを100に制限しますか?スタックオーバーフローにより600が可能です。どのデータ型を使用しますか? – Paul

+0

なぜnvarcharを使用しないのですか?あなたは代わりに何を使用しますか? –

+0

@Paul:1000! aarrghghhh ... – gbn

0

...クライアント開発者が、私は、パフォーマンスと効率性に焦点を当てて開発者のDBAとしてUnicodeの控訴をお勧めしたいですを表す。私が素早いプロトタイプをやっているなら、私は255のデフォルトを残しています。コメントなどのものは、おそらく1000にします。

私はそれをもっと小さくする唯一の方法は本当に私が間違いなく知っている事ですsiez of、zip codesやNI番号などを入力してください。

0

- などの名前、電子メール、アドレス、のような - あなたは合理的に高い最大長を置く必要があります。たとえば、50文字以上のファーストネームは少し疑わしいようです。そのサイズを超える入力はおそらく最初の名前だけを含むでしょう。しかし、データベースの初期設計では、を妥当なサイズにして、それをダブル倍にしてください。したがって、最初の名前の場合は100に設定します(100が「合理的なサイズ」の場合は200)。その後、アプリを実稼働させ、ユーザーが十分に長い時間データを収集してから実際にmax(len(FirstName))を確認できるようにします。疑わしい価値はありますか? 50文字を超えるものは何ですか?そこにあるものを見つけて、実際にファーストネームかどうかを確認してください。そうでなければ、入力フォームはおそらくより良い説明/検証が必要です。

コメントも同様です。最初にnvharchar(max)に設定してください。のパフォーマンスを最適化するためにデータベースが十分に成長したら、に戻ってください。コメントの最大長を取って、それを倍増させて、あなたの列の最大長を伸ばしてください。

関連する問題