列のデータ型のパラメーターは正確に何をしますか? 基本的に:
TINYINT(1) を試してみたところ、1 または 0 しか保持されていないように見えました。少なくとも 0 ~ 9 を表示/保存しないのはなぜですか?
編集: 問題は MySQL の問題ではなく、CakePHP による予期しない動作であることが判明しました。詳細については、私の回答をお読みください。元の質問を以下に残しておくと、役立つ回答が理にかなっています。
私がやったこと:
コマンドを使用してMySQLテーブルを作成しました
CREATE TABLE table_name (
... irrelevant columns
transaction_type TINYINT(1) NOT NULL COMMENT 'identifier from 0-5 (for now)'
);
transaction_type 列に 0 と 1 以外の値を格納できなかったため、すぐに完全に混乱しました。
いくつかの調査の結果、to TINYINT
(またはその他の整数データ型) のパラメーターは、文字の表示幅にすぎないとかなり自信を持って判断しました。私はこれが2つのことを意味することを理解しました:
- TINYINT の境界内にある限り、挿入された値全体を格納する必要があります。
- 1 文字しか表示されないので、表から選択すると 0 ~ 9 の値が表示されるはずです。
これらの仮定の少なくとも 1 つ (またはパラメーター全体に対する私の理解) が間違っているに違いないと考えています。なぜなら、その列に 1 より大きい値を挿入しようとすると、常に 1 が表示されるからです。
次に試しました:
ALTER TABLE table_name CHANGE transaction_type transaction_type TINYINT;
突然、好きな値を挿入できるようになりました。ただし、上記のコマンドでテーブル全体が変更されたにもかかわらず、以前の挿入の値は 1 のままであり、実際に 1 として格納されているのではないかと疑っています。
表示幅を誤解していますか、それとも何か他のことを完全に間違っていますか?
余談ですが、整数列がテーブルでどのように表示されるかを気にしない場合、パラメーターを指定する理由はありますか? つまり、INT(11) は INT よりも優れていますか?
おそらく私にとってもっと役立つはずの同様の質問: MySql: Tinyint (2) vs tinyint(1) - 違いは何ですか?
表示幅を説明する最も明確な情報源: http://matt.thomm.es/archive/2006/11/28/mysql-integer-columns-and-display-width