MySQLのこれらのデータにはどのようなタイプを使用しますか?

私はこれらのデータにどのような型(set、integer、time、char、varchar、text、...)を使うべきかわからない:

  • IP
  • 個人的なメッセージ
  • データと時間
  • タイトル
  • 名前(または姓)
  • ユーザーエージェント
  • フォーラムの回答(またはコメント)
  • メールアドレス
  • パスワード
  • カスタムセッションCookie
0
ダウン投票の理由は何ですか?私のプログラマーがこのような質問をもっと頻繁に行うと、喜んでいることがあります。
追加された 著者 AndreKR,

2 答え

これはあなたの個人的な好み/あなたの会社の慣習に少し依存しますが、

  • IP: CHAR(15)
  • personal message: TEXT
  • date and time: DATETIME
  • title: VARCHAR(255)
  • name (or surname): VARCHAR(255)
  • user-agent: VARCHAR(255)
  • forum answer (or comment): TEXT
  • email address: VARCHAR(255)
  • country: CHAR(2)
  • password: VARCHAR(255)
  • custom session cookie: VARCHAR(255)
4
追加された
なぜBLOBがないのですか? phpBBはBLOBをいくつかの場所で使用します。
追加された 著者 ilhan,
パスワードは少なくともMD5()である必要があります。つまり、CHAR(32)です。
追加された 著者 Glavić,
あなたがリストしたすべてのケースは、人間が読めるテキストであり、文字セット変換の恩恵を受けるからです。 BLOBとTEXTの違いは次のとおりです。TEXTはクライアントの接続文字セットとの間で変換されます。
追加された 著者 AndreKR,
私は衝突抵抗の欠如のためにMD5を嫌っている。しかし、私は代替策を決めることはできません。 ;)
追加された 著者 AndreKR,
可能であれば、ipは int でなければなりません。この場合、 personal message text を使用すべきではありません。
追加された 著者 James.Xu,

これはちょっと面白い質問ですが、私はIPアドレスに答えます。

INT UNSIGNEDにIPアドレスを格納することができます。

mysql> SELECT INET_ATON('192.168.0.10') AS ipn; 

mysql> SELECT INET_NTOA(3232235530) AS ipa; 

したがって、INT UNSIGNED(4バイト)にIPアドレスを格納することができます。これはもちろん、CHAR(15)よりはるかに効率的で高速です。

1
追加された
クライアントはINET_NTOA()関数を介して選択し、正しい出力IPを表示する必要があります。レンジルックアップが速いのはなぜでしょうか?例:どの国からIPを検索するのが最適です。 ip2location.com にはINT値のデータベースがあります。
追加された 著者 Glavić,
クライアントとして私はカスタム管理者や何かを意味しましたが、顧客はphpmyadminを見ません;-)あなたが書いているように検索が必要な場合は正しいです。だから最後に、あなたはこのIPコラムで何をするのかを知る必要があります。なぜこのスレッドは少し面白いです。そしてもう一つは、これはIPv4の唯一のipです。いくつかの読書> bafford.com/ 2009/03/09 /…
追加された 著者 Glavić,
スペースを最大限に節約しようとするなら、はい。一方、クライアントソフトウェアで見るのはあまり実用的ではなく、範囲検索もおそらく遅くなるでしょう。
追加された 著者 AndreKR,
私が知っているクライアント(例えば、phpMyAdmin、MySQL Workbench、Navicat、HeidiSQL)は、テーブルを見るときにそのことを行うことはできません。遅いルックアップの場合、私は WHERE INET_NTOA(col)LIKE "192.168。%。255" のようなものを思いついた。
追加された 著者 AndreKR,
IPv4 ...良い点。
追加された 著者 AndreKR,
改善(?)があります。 IPを4つのtinyintカラムに保存します。
追加された 著者 ypercubeᵀᴹ,