OKWaveが大リニューアル!ただいまβ版公開中

種別カラムのデータ型について


OKWaveコミュニティー
新規ユーザー登録(無料)今すぐ登録しよう!!
はじめての方へ OKWaveではこんなことができます!
ピックアップ
特集一覧
ブラック会社の喜怒哀楽
ブラック会社の喜怒哀楽
現代を生き抜く知恵と努力!あなたの未来を明るく照らします!
OKWaveスタッフブログ
OKWaveスタッフブログ
OKWaveスタッフから便利でお得な情報をQ&Aと共にご紹介します!
好きだからこそ切ない!恋愛特集
好きだからこそ切ない!恋愛特集
「会いたいときに会えない」そんな切ない思いを恋愛で体験したことはありませんか?
その他の特集はこちらからご覧下さい

質問

質問者:takagoo100 種別カラムのデータ型について
困り度:
  • すぐに回答を!
MySQLバージョン4.1.16を使用しています。

数種類の種別(青が1、赤が2、緑が3として)を保持するカラムの場合、
そのデータ型はTINYINTなのか、VARCHAR(1)なのか、どちらが良い方法なのでしょうか?
それとも(青をblue、赤がred、緑がgreenとして)
VARCHAR(10←(少し多めに確保))として英字(blue、red、green)を
保存するやり方もあるのでしょうか?


テーブル「好きな色」(TINYINTの場合)
+----------+---------+
|  人_id   | 色の種別 |
+----------+---------+
|  田中   |   3   |
+----------+---------+
|  鈴木   |   1   |
+----------+---------+

テーブル「好きな色」(VARCHAR(1)の場合)←この場合は
文字として数字を保存することになるのでしょうか?
+----------+---------+
|  人_id   | 色の種別 |
+----------+---------+
|  田中   |   3   |
+----------+---------+
|  鈴木   |   1   |
+----------+---------+

テーブル「好きな色」(VARCHAR(10)の場合)
+----------+---------+
|  人_id   | 色の種別 |
+----------+---------+
|  田中   |  green |
+----------+---------+
|  鈴木   |   blue |
+----------+---------+
質問投稿日時:08/03/18 23:44
質問番号:3874968
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:chukenkenkou TINYINTで構わないですが、比較するのがCHAR(1)でなく、VARCHAR(1)なのはなぜでしょうか?
VARCHARにすれば、長さの情報が余分に付きます。
また、MySQL限定なら、ENUMという特殊なデータ型があります。

色の種別を文字で個々の人で持つのではなく、色の管理表を作って、色コードと色を管理し、色コードで人と対応付けるというのが、普通に考えられる方法です。
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:08/03/19 01:14
回答番号:No.1
この回答へのお礼ご返答ありがとうございます。
なるほど、数値型として格納できるならそうした方がいいということですね。
またテーブルを作成するにあたっての考え方もなんとなくですが分かりました。
ありがとうございます。