私はちょうど定義の利益/用法であるかを知りたいZEROFILL
ためINT
にデータ型MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
私はちょうど定義の利益/用法であるかを知りたいZEROFILL
ためINT
にデータ型MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
回答:
タイプ付きの列を選択するとZEROFILL
、列の定義で指定された表示幅まで、フィールドの表示値にゼロが埋め込まれます。表示幅より長い値は切り捨てられません。の使用ZEROFILL
も意味することに注意してくださいUNSIGNED
。
ZEROFILL
表示幅を使用しても、データの保存方法には影響しません。表示方法にのみ影響します。
以下は、の使用を示すSQLの例ですZEROFILL
。
CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;
結果:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
理解するための1つの例ZEROFILL
。
ドイツでは、5桁の郵便番号があります。ただし、これらのコードはゼロで始まる場合80337
があるため、municの有効な郵便番号で01067
あり、ベルリンの郵便番号です。
ご覧のとおり、ドイツの市民は郵便番号が5桁のコードとして表示されることを期待しているため、1067
奇妙に見えます。
これらのデータを保存するために、a VARCHAR(5)
またはorを使用できますがINT(5) ZEROFILL
、ゼロで満たされた整数には2つの大きな利点があります。
1067
、まだ01067
戻ります多分この例は、の使用を理解するのに役立ちますZEROFILL
。
私はパーティーに遅れていることを知っていますが、zerofillはTINYINT(1)のブール表現に役立ちます。nullは常にFalseを意味するわけではなく、場合によってはそれを望まないこともあります。tinyintをゼロフィルすることで、これらの値を効果的にINTに変換し、アプリケーションが対話時に発生する可能性のある混乱を取り除きます。アプリケーションは、これらの値をプリミティブデータ型True = Not(0)と同様の方法で処理できます。
666
ので、この回答をそのままにしておきたいと思います;-)
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
オプションの(非標準)属性ZEROFILLと組み合わせて使用すると、デフォルトのスペースのパディングはゼロに置き換えられます。たとえば、INT(4)ZEROFILLとして宣言された列の場合、値5は0005として取得されます。
zerofill
が非標準であることにも注意する必要があります。「カラムが式やに関与しているとき、属性は無視されたクエリ。あなたが持っている整数列の表示幅よりも大きい値を格納する場合は、属性をMySQLは、いくつかの複雑な結合のために一時テーブルを生成するとき、あなたは問題が発生することがあります。これらのケースでは、MySQLはデータ値が列の表示幅に収まると想定しています。 "ZEROFILL
UNION
ZEROFILL