web-dev-qa-db-ja.com

ブール目的の列char(0)またはtinyint(1)

ブール目的の列の場合、どちらが優れているか:null許容char(0)またはtinyint(1)

Boolがtinyint(1)のエイリアスであることは知っていますが、O'reillyが発行した「HighPerformanceMySQL」の本では次のように述べています。

「1ビットのストレージスペースにtrue/false値を格納する場合、別のオプションはnull許容のCHAR(0)列を作成することです。この列は、値の不在(NULL)またはゼロのいずれかを格納できます。 -長さの値(空の文字列)。 "

サイズ、パフォーマンス、インデックス作成、または...

[〜#〜] update [〜#〜]:このリンクがこの質問に役立つことがわかりました: Innodbテーブルの効率的なブール値ストレージ

1
Arash Mousavi

複合インデックスの一部であっても、CHAR(0)列にインデックスを付けることは不可能であることに注意してください。

サイズに関しては、NULL可能CHAR(0)に勝るものはありません。しかし、これらのうちいくつありますか?テーブル内の他のデータ型と比較して?通常、全体的なデータ型とサイズと比較すると、これは無視できます。

最も明確なのはBOOL/TINYINTUNSIGNEDです。どの値が期待されるかが最も明白です。

それ以外の場合は、私の投稿で多くの代替案を検討してください。コメントに関する良いアイデアを参照してください。 MySQLブールデータ型の選択

5
Shlomi Noach