
くだらない質問で申し訳ありませんが宜しくお願いします。
下記のようなデータを格納するテーブルを構築しています。
・ユーザーID
・名前
・カタカナ
・パスワード
・年齢
・郵便番号
・住所1
・住所2
・住所3
・電話番号
・メールアドレス
・備考
・削除フラグ
・登録者
・登録日
・更新者
・更新日
上記の内容を下記のようなテーブルのフィールドのデータ型を考えました。
・ユーザーIDのデータ型をVARCHAR(4)
・名前のデータ型をVARCHAR(32)
・カタカナのデータ型をVARCHAR(32)
・パスワードのデータ型をVARCHAR(255)
・年齢のデータ型をINTEGER
・郵便番号のデータ型をVARCHAR(8)
・住所1のデータ型をVARCHAR(255)
・住所2のデータ型をVARCHAR(255)
・住所3のデータ型をVARCHAR(255)
・電話番号のデータ型をVARCHAR(18)
・メールアドレスのデータ型をVARCHAR(255)
・備考のデータ型をTEXT
・削除フラグのデータ型をVARCHAR(1)
・登録者のデータ型をVARCHAR(4)
・登録日のデータ型をTIMESTAMP
・更新者のデータ型をVARCHAR(4)
・更新日のデータ型をTIMESTAMP
そうしたら下記のような風にテーブルのフィールドのデータ型にしたら格納する文字列の桁エラーが起こらないからどうといわれました。
・ユーザーIDのデータ型をVARCHAR(4)
・名前のデータ型をTEXT
・カタカナのデータ型をTEXT
・パスワードのデータ型をTEXT
・年齢のデータ型をTEXT
・郵便番号のデータ型をTEXT
・住所1のデータ型をTEXT
・住所2のデータ型をTEXT
・住所3のデータ型をTEXT
・電話番号のデータ型をTEXT
・メールアドレスのデータ型をTEXT
・備考のデータ型をTEXT
・削除フラグのデータ型をVARCHAR(1)
・登録者のデータ型をVARCHAR(4)
・登録日のデータ型をTIMESTAMP
・更新者のデータ型をVARCHAR(4)
・更新日のデータ型をTIMESTAMP
※現在、使用しているデータベースはPostgreSQLですが、Microsoft SQL ServerやOracleやMySQL等の他のデータベースでもいいものなのかもご教授いただけると助かります。
私の知識不足でどちらがいいのかがわからず投稿させてもらいました。
申し訳ありませんが皆さんのお知恵をお貸し下さい。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
> 文字列を格納するフィールド型は可変長文字列型にした方がいいのか、固定長文字列型にした方がいいのかです。
varchar 型も可変長文字列なので varchar と text を比べても意味はありません。
固定長と可変長を比べるなら char と varchar を比べなければ行けません。
CPUの性能が良くなり、メモリの搭載量が増え、HDDの読込速度が上がった今となっては、char 型の優位性はあまりないと考えていいでしょう。
データの取扱量が多い環境では、char より varchar の方が資源の有効利用という意味ではメリットが多いかもしれません。
text 型はRDBMSによっては検索時の性能や制限に差があるので、必要最小限にするべきだと思います。
よほど大きな文字列が入る予定が無ければ、varchar(2000) といった感じで varchar 型で大きく取った方が使い勝手がいい場合があります。
No.2
- 回答日時:
varcharは「可変長文字列」ですよ。
PostgreSQLでは、こんなのがありました。
http://lets.postgresql.jp/documents/technical/te …
これに従えば、textが有効的なのは「備考」くらいでしょう。
長いと有名なピカソの本名でも200文字までいきません。
MySQLでは、varcharに比べてtextには制限があります
http://dev.mysql.com/doc/refman/5.1/ja/blob.html
MS SQL Serverでは、textは「将来削除される予定」とあります
http://msdn.microsoft.com/ja-jp/library/ms187993 …
No.1
- 回答日時:
Oracleも視野に入れるなら TEXT 型は不適切です。
Oracleには TEXT 型がありませんので、そのままのDDLではテーブルを作成できませんし、PostgreSQLからデータをコンバートしようとした時、長い文字列が入っているとコンバートできない可能性が有ります。
また、検索をかける際も VARCHAR 型なら文字の正規化をDBにやらせてあいまい検索できる等のメリットがあります。(RDBMSによっては TEXT 型でも対応できる場合もありますが全てではありません)
TEXT 型は文字長を気にしなくて済むので便利ですが、使い勝手が悪い場合もありますし、郵便番号のように桁数が決まっているようなものの場合、不正なデータが入ってしまう可能性を残してしまいますので、どうしても必要な場合だけにとどめた方がいいと思います。
この回答への補足
回答ありがとうございます。
説明不足ですみません。簡単に説明をさせていただきます。
文字列を格納するフィールド型は可変長文字列型にした方がいいのか、固定長文字列型にした方がいいのかです。
ネットで調べてみましたがいい回答を見つける事ができませんでした。
※たぶん、私の探し方が下手なんだと思いますが・・・
大変申し訳ありませんが再度、説明していただけませんでしょうか。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- 統計学 最終居住国は離散型データですか? 4 2023/05/07 21:37
- Oracle 参照関係のフィールドについて 1 2023/05/27 17:49
- XML MSFormsとは何ですか? 2 2022/05/02 09:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MYSQLで、ファイルを格納する方...
-
Float型の時の計算結果がおかしい
-
ヌル値は記憶容量を必要としな...
-
postgreSQLのデータ型
-
VBAで変数内に保持された二次配...
-
プライマリーキーの昇順でソー...
-
SQLのVARCHARとVARCHAR2の違い
-
mysqlがインストールされている...
-
MySQLカラム名は日本語と英数字...
-
Column '' not found.
-
ADOのバージョンを確認する方法
-
副問合せにLIKE文を使う方法は...
-
パスワード入力を省略したい
-
MySQLのテーブル作成でハイフン...
-
ODP.NETのバージョン確認
-
テーブル作成でエラーが出てき...
-
XAMPPのMySQLを外部から接続で...
-
文字列分割して、ソート出来ま...
-
date項目の“年”部分だけで grou...
-
like句を使って日本語を検索す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで変数内に保持された二次配...
-
SQLのVARCHARとVARCHAR2の違い
-
INT型は金額の型に使用するべき...
-
Excel VBA SelectedItems
-
postgreSQLのデータ型
-
プライマリーキーの昇順でソー...
-
Float型の時の計算結果がおかしい
-
オラクルのデータ型・通貨について
-
mysql(mariaDB)の格納文字数は...
-
カラムの長さを指定する意味に...
-
ヌル値は記憶容量を必要としな...
-
ハングル文字が入らない。
-
AccessからOrcleのODBCリンクテ...
-
MysqlにURLを登録する方法
-
MySQLで先頭の0が省略されてし...
-
経過時間(hhmmdd)をDATE型には...
-
select文でのデータの取り出し方法
-
MySQLの型のサイズ指定で速度は...
-
DB2 INSERT時の格納順序
-
MySQL TIMESTAMP型は、UTCですか?
おすすめ情報