• 締切済み

text型とchar型をどちらを選ぶか?

SQLserver2000でのテーブル定義について質問です。 あるテーブルの中で、最長4000文字を格納するデータ項目があります。 現在、データ型はtextにしているのですが、一般論として、これはcharにした方が良いのでしょうか? また、SQLserverのデータ格納単位(1ページ)が8KBという点は、textかcharのどちらが望ましいかに影響するのでしょうか?

みんなの回答

回答No.4

>1ページ8KBをほぼ占有 あ。そうだ。1レコードあたりの最大がそれだけでしたね。 …ということはvarcharだと厳しいかもしれませんね…。 textはその枠とは関係ないので、そのほうがいいのかも。 特に検索対象にしないのであればリスクもないわけですし…。

3zservice
質問者

お礼

ご回答ありがとうございます。 やはり1レコードサイズは気にすべきなんですかね。 このあたりの点にお詳しい方がいらっしゃいましたら、アドバイス・ご意見お願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

テキスト型だと、その列をWhere条件として指定することは出来ない記憶があるんですが…。 あと、nvarcharだと、全角半角に関係なく文字数がサイズになるので、 管理がしやすいのと、UNICODEなので、多言語対応が楽?というのが有利かも…。

3zservice
質問者

お礼

ご回答ありがとうございます。なるほど。 気になるのは、4000文字のnvarcharとした場合、データがフルで格納されると1ページ8KBをほぼ占有となる点です。 これはあまり気にしなくて良いのでしょうか? ご存知の方ご返答お願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

私なら varchar じゃなく nvarchar を使いますね。

3zservice
質問者

お礼

ご回答有難うございます。 ntextではなくnvarcharを選択される理由をお教え頂けますでしょうか? 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

Char型で長さ4000だと長さ100の値を入れたときに、値の後ろに3900個の空白が自動で入ってしまいませんか。 Char型は固定長だったと思いますが。Oracleではそうです。

3zservice
質問者

お礼

回答ありがとうございます。 > Char型は固定長だったと思いますが。 総称的にcharと書いてしまいました。すいません。 正確にはtextかvarcharかの選択肢になろうかと思いますので、改めてどなかたご回答お願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • char型について【初心者です】

    プログラミング初心者です。 char型について質問です。 一般的にchar型とは文字列の定義という風に教えてもらったことがあるのですが、言語やデータベースによってchar型の定義は違うものなのでしょうか? 例えば、javaでは   char a = 'あ' というように、文字が全角一文字しか定義できないのに対して、SQLでテーブルを定義するときでは「長さ:10」というように文字を一文字以上格納できるので、大変疑問です。(この考え方が間違っているのでしょうか?) SQLの「長さ」というのも具体的に何の長さなのか分かりません。 かなりの初心者と思われるでしょうが分かりやすい回答を頂きたく思います。 よろしくお願いします。

  • 数値をNUMBER型にするかCHAR型にするか。

    テーブルのカラムで、2005という文字を格納したい場合、 属性として、NUMBER型、CHAR型の選択ができると思います。 ●テーブル名 TABLE1 カラム名 A B 属性 ??? char データ 2005 XXXX ●テーブル名 TABLE2 カラム名 A C 属性 ??? char データ 2005 XXXX このカラムAが、TABLE2のAの2005という値と結合させる (結合させるためのキーとなっている場合) ということがある場合、NUMBER型での定義とchar型での定義に 速度的な観点やその他の観点で、なにか差異みたいなものはありますでしょうか? 下記のように、値を指定するところでは、シングルコーテーションが必要か不必要かというのは、あるかと思いますが、 結合自体で、差異はありますでしょうか? ■CHAR型にした場合。 select * form TABLE1,TABLE2 where A='2005' and TABLE1.A=TABLE2.A ■NUMBER型 select * form TABLE1,TABLE2 where A=2005 and TABLE1.A=TABLE2.A

  • charってなんですか??

    http://www.nttdocomo.co.jp/service/imode/make/content/html/about/input.html 上記のドコモのサイトの中で、下のように【accesskey="char"】という記述があります。 この【char】というのはなんなのでしょうか??(読み方含め) うまいググり方も分からず質問させていただきました。 ------------------------------------ 【書式1】テキスト入力 <INPUT type="text" name="フィールド名" value="データ" size="文字数" maxlength="最大文字数" accesskey="char" > ------------------------------------- 分かる方、お願い致します!

    • ベストアンサー
    • HTML
  • char[]をDWORDに格納するには

    お世話になります。 今、VC++でMFCプログラミングをしています。 char Data[256]に格納した文字列を SetAddress()の引数として渡したいのですが、どうしたらよいでしょうか? どうぞよろしくお願い致します。

  • データ移行

    システムの再構築でmdb(Access2000)からSQLServer2005とSQLServer2000からSQLServer2005へのデータ移行があります。 データ移行と言いましても、テーブルの構成が変わるため必要な項目と不必要な項目があります。今、考えているのが、一度SQLServer2005へmdbまたは、SQLServer2000と同じテーブルを作成(一時的なテーブル)し、その後、INSERT文で新規テーブルに必要な項目を追加していきたいと思っています。 一時的なワークテーブルを作成する際にmdbからとSQLServer2000からとでい色々な方法があると思うのですが、どの様な方法があり、その方法のメリット・デメリットを知りたいのですが、教えて頂けないでしょうか?よろしくお願いします。

  • alter table で text が midiumtext になってしまう

    当初作ったテーブル(テーブル名=test)では col1 char(10) unique not null, col2 text not null, col3 text not null, col4 text not null だったのですが、col1だけをchar→varcharに変えたくて alter table test modify col1 varchar(10) unique not null としたところ、他のtext型項目が全てmidiumtextになってしまいました。 ひとつずつtextに直そうと alter table test modify col2 text not null を実行し次に alter table test modify col3 text not null とするとcol3はtextになるがcol2がまたmidiumtextになってしまいます。 midiumtextほどの容量は必要ないのでcol2~col4をtextに戻したいのですが、 どのようにすればよいのでしょうか。 ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • accessの SQL文 INSERT命令

    次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

  • データ型の変更

    SQLserver2000で、テーブルの列で定義したデータ型の変更方法を教えて下さい。 よろしくお願いします。

  • ACCESS2000 上でテーブルの値を手で空白にしたい時どうすれば?

    ACCESS2000上でSQLServer上のテーブルの データのある項目を空白にしたいので、 ACCESS2000上でSQLServer上のテーブルに アタッチ(ODBC設定済)してあるテーブルのデータ を手で消したところ、 "" となって欲しいのに ACCESSから手で消すと NULL となってしまいます。 ACCESSで消したときに""としたいときはどうすれば よいのでしょう・・? 伝わるかな・・・

  • pro*cobol ⇔ oracle のデータ型の扱い

    お世話になります。 pro*cobolで、テーブルの作業領域を定義し、 データの編集後、oracleのテーブルへ出力している のですが、cobol側の定義はpic9タイプで oracleの項目定義ではCHAR型になっております。 この状態で、cobol側のpic9タイプの項目に "A00001"等文字を含む値を設定した所、 ABENDせずにoracleテーブルに"A00001"の 項目値を出力しています。 cobolだけに限れば、属性エラーなのですが、 この場合、oracleの項目定義が優先されるのでしょうか? よろしくご教授の程、お願い申し上げます。

Windows11正式版のリリース間近
このQ&Aのポイント
  • 10月5日にWindows11正式版がリリースされます。
  • Windows11に切り替えても良いPCを所有され、尚且つ11の動作条件に適合している方、Windows11正式版に乗り換える時期を教えてください。
  • 私はWindowsUpdateで配信されるまで様子を見ようと思います。
回答を見る