まず、varchar(max)はMicrosoftが使用するテキストデータ型の代替です。テキストなどの古いフィールドタイプは、後のバージョンでキャンセルされることがあります。 では、保存可能なテキストはvarchar(max)で確実に保存可能です。 実際、格納できる文字数は非常に多いです。 保存可能な4億2千万文字はアクセスが難しく、私はそれが難しいと考えています。
以前だけ知っていたテキストと画像はSQL Serverによって時代遅れになる可能性のあるデータ型ですしかし、具体的な理由ははっきりしません。今日読んだとき、テキストとvarchar(max)およびnvarchar(max)の違いがわかりました。主に演算子の制限のために、テキストは以下の関数でのみ使用可能です。
| 機能 | 命題 | | データ長 | 本文を読む | | PATINDEX(PATINDEX) | テキストサイズをセット | | サブストリング | 更新テキスト | | テキストPTRです | WRITETEXT(テキストを書く) | | TEXTVALID | |
例えば、「Text」列のデータ型がテキストの場合、「=」や「left()」といった操作には使えません。例えば、以下の例です。
テーブルを作成し、データを入力します:
もし存在する場合(id = OBJECT_ID('[asdf]') および OBJECTPROPERTY(id, 'IsUserTable') = 1 のsysObjectsから*を選択)
ドロップテーブル [ASDF]
テーブルを作成 [asdf] (
[興味深] [int] 単位元(1, 1)はnullでない、
[本文] [本文] NULL ,
[varcharmax] varchar(max) NULL)
ALTER TABLE [ASDF] NOCHECK ADD CONSTRAINT [PK_asdf] プライマリキー 非クラスタリング([inttest])
IDENTITY_INSERT [asdf] オン
挿入 [asdf] ( [ [inttest] , [text] , [varcharmax] ) 値 ( 1 , '1111111', '1111111')
IDENTITY_INSERT [asdf] 停止
クエリを実行してください:
問い合わせ1: セレクト[本文]
、[ヴァルシャルマックス]
[testDB]より。 [dbo]。 [ASDF]
どこ
[本文] ='11111' および
[ヴァルシャルマックス] = 『1111111』
以下のエラーメッセージが表示されます:
Msg 402、レベル16、州1、ライン1
データ型テキストとヴァルチャーは、等しい演算子では互換性がありません。
問い合わせ2: セレクト[本文]
、[ヴァルシャルマックス]
[testDB]より。 [dbo]。 [ASDF]
どこ
[ヴァルシャルマックス] = 『1111111』
正常に動作可能です
MS SQL2005以上では、大きな値のデータ型(varchar(max)、nvarchar(max)、varbinary(max))を追加します。 大きなデータ型は最大2^30〜1バイトのデータを保存できます。
これらのデータ型は、より小さなデータ型であるvarchar、nvarchar、varbinaryと動作的に同一です。
Microsoftの主張は、以前のテキスト、ntext、画像のデータ型をこのデータ型に置き換えることであり、それらの対応関係は以下の通りです。
varchar(max)-------text;
nvarchar(max)-----ntext;
varbinary(max)----image。
大きな価値のデータ型では、以前よりも大きな価値のデータに対してはるかに柔軟に作業できます。 例えば、テキストは以前に「like」で使えませんが、varchar(max)以降はこれらの問題はありません。なぜならvarchar(max)は動作がvarchar(n)と同じであるため、varcahrで使えることはvarchar(max)でも使えるからです。
さらに、挿入済みおよび削除済みテーブルの大きな値型の列参照に対してAFTERトリガーの使用もサポートします。 テキストは良くありません。要するに、大きな数値のデータ型を使うと「腰が痛くなくなり、脚も痛くなく、一息で6階まで上がれる」と言われます。 何を待っているのですか?大きな価値タイプを使いましょう。
|