MySQL での Zerofill の使用、利点、および代替
今日は、MySQL の ZEROFILL
属性の使用、利点、および代替について説明します。
MySQL での ZEROFILL
属性の使用と利点
ZEROFILL
属性を使用する利点は、入力およびデータ ストレージとは関係なく、出力値の表示方法にのみ影響することです。 ZEROFILL
while カラム定義を使用すると、MySQL は自動的に UNSIGNED
を追加します。
ZEROFILL
属性を使用して列 (属性) を定義してテーブルを作成すると、列定義で指定された表示幅まで、列の出力 (結果値) の左側がゼロで埋められます。
コード例:
CREATE TABLE table_one (
column_one INT(8) ZEROFILL NOT NULL,
column_two INT(8) NOT NULL
);
INSERT INTO table_one (column_one, column_two) VALUES
(9, 9),
(98, 98),
(987, 987),
(987654321, 987654321);
SELECT column_one, column_two FROM table_one;
出力:
+------------+------------+
| column_one | column_two |
+------------+------------+
| 00000009 | 9 |
| 00000098 | 98 |
| 00000987 | 987 |
| 987654321 | 987654321 |
+------------+------------+
4 rows in set (0.00 sec)
column_one
属性の幅が 8 である上記の例を参照してください。指定された表示幅よりも長い値は切り捨てられません。
上記のテーブル出力の最後のレコード 987654321
を参照してください。
ZEROFILL
属性を持つ整数フィールドに、表示幅よりも大きな値を格納するとします。 MySQL が複雑な結合
のために一時テーブルを生成するときに、問題が発生する場合があります。
MySQL サーバーは、データ値がフィールド (列) の表示幅に収まると想定します。 UNION
クエリまたは式に含まれる列は、ZEROFILL
属性を無視します。
MySQL 8.0.17 に関しては、ZEROFILL
属性は数値データ型に対して非推奨です。 したがって、整数データ型の表示幅は MySQL の将来のバージョンで削除されるため、ZEROFILL
属性のサポートに期待する必要があります。
MySQL における ZEROFILL
属性の代替機能
したがって、これらの属性に対して同じ効果を生み出す代替手段を使用できます。 たとえば、LPAD()
を使用して、表示幅まで左側にゼロを追加したり、CHAR
フィールドにフォーマットされた数値を格納したりできます。
次のコード スニペットを参照してください。
SELECT LPAD(column_one,8,0) FROM table_one;
出力:
+----------------------+
| LPAD(column_one,8,0) |
+----------------------+
| 00000009 |
| 00000098 |
| 00000987 |
| 98765432 |
+----------------------+
4 rows in set (0.001 sec)
LPAD()
を使用して、INT
型の列の左側にゼロを埋め込むだけでなく、次のように VARCHAR()
型の値にも使用できます。
SELECT LPAD('Hello',8,'??') FROM table_one;
出力:
+----------------------+
| LPAD('Hello',8,'??') |
+----------------------+
| ???Hello |
| ???Hello |
| ???Hello |
| ???Hello |
+----------------------+
4 rows in set (0.00 sec)