web-dev-qa-db-ja.com

MySQLのゼロフィルの利点は何ですか?

ZEROFILLINT DataTypeにMySQLを定義することの利点/使用法を知りたいだけです。

`id` INT UNSIGNED ZEROFILL NOT NULL 
151
diEcho

タイプZEROFILLで列を選択すると、列定義で指定された表示幅まで、フィールドの表示値にゼロが埋め込まれます。表示幅より長い値は切り捨てられません。 ZEROFILLの使用はUNSIGNEDも意味することに注意してください。

ZEROFILLと表示幅を使用しても、データの保存方法には影響しません。表示方法のみに影響します。

ZEROFILLの使用方法を示すSQLの例を次に示します。

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
235
Mark Byers

ZEROFILLの使用法が興味深いところを理解するための1つの例:

ドイツでは、5桁の郵便番号があります。ただし、これらのコードはゼロで始まる場合があるため、80337はmunicの有効な郵便番号、01067はベルリンの郵便番号です。

ご覧のように、ドイツ国民は郵便番号が5桁のコードとして表示されることを期待しているため、1067は奇妙に見えます。

これらのデータを格納するには、ゼロ埋め整数には2つの大きな利点があるのに対して、VARCHAR(5)またはINT(5)ZEROFILLを使用できます。

  1. ハードディスクのストレージ容量を少なくする
  2. 1067を挿入しても、01067が返されます

この例は、ZEROFILLの使用を理解するのに役立つかもしれません。

125
Phil

これは、四角い箱が好きな邪魔な人向けの機能です。

挿入する

1
23
123 

ただし、選択すると値が埋め込まれます

000001
000023
000123
58

連結この「整数」を他の何か(別の数字またはテキスト)と一緒に「テキスト」としてソートする必要がある場合に、正しいソートに役立ちます。

例えば、

整数フィールド番号(5としましょう)を使用する必要がある場合連結としてA-005または10/0005

15
Ken

私はパーティーに遅れていることは知っていますが、ゼロフィルはTINYINT(1)のブール表現に役立ちます。 Nullは常にFalseを意味するわけではなく、場合によってはそれを望まないこともあります。 tinyintをゼロで埋めることにより、これらの値を効果的にINTに変換し、アプリケーションが対話時に混乱を引き起こす可能性を排除します。アプリケーションは、これらの値をプリミティブデータ型True = Not(0)と同様の方法で処理できます。

4
Marlin
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)
3
zloctb

オプションの(非標準の)属性ZEROFILLと組み合わせて使用​​すると、デフォルトのスペースの埋め込みはゼロに置き換えられます。たとえば、INT(4)ZEROFILLとして宣言された列の場合、値5は0005として取得されます。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

1
Daniel Kutik

数値列にZEROFILLを指定すると、MySQLはUNSIGNED属性を列に自動的に追加します。

UNSIGNED属性を許可する数値データ型は、SIGNEDも許可します。ただし、これらのデータ型はデフォルトで署名されているため、SIGNED属性は効果がありません。

上記の説明は、MYSQLの公式Webサイトから引用したものです。

1
Adeel

ゼロフィル

これは本質的に、整数値23が幅8のINT列に挿入されると、利用可能な位置の残りが自動的にゼロで埋められることを意味します。

したがって

23

になる:

00000023
0
Simon H