В чем преимущество zerofill в MySQL?

Я просто хочу знать, что такое преимущество / использование определения ZEROFILL на INT тип данных в MySQL?

`id` INT UNSIGNED ZEROFILL NOT NULL 

9 ответов


при выборе столбца с типом 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

один пример, чтобы понять, где использование ZEROFILL может быть интересным:

в Германии у нас есть 5-значные zipcodes. Однако эти коды могут начинаться с нуля, поэтому 80337 является допустимым zipcode для munic, 01067-это zipcode Берлина.

Как вы видите, любой гражданин Германии ожидает, что zipcodes будет отображаться как 5-значный код, поэтому 1067 выглядит странно.

для хранения этих данных вы можете использовать VARCHAR (5) или int(5) ZEROFILL, тогда как zerofilled integer имеет два больших преимущества:

  1. много меньше места для хранения на жестком диске
  2. если вы вставляете 1067, вы все равно получаете 01067 назад

возможно, этот пример помогает понять использование ZEROFILL.


это особенность для нарушенных личностей, которые любят квадратные коробки.

вставить

1
23
123 

но когда вы выбираете, он заполняет значения

000001
000023
000123

Это помогает в правильной сортировке в том случае, если вам нужно будет объединения это " целое число "с чем-то еще (другое число или текст), которое потребуется отсортировать как" текст".

например,

Если вам нужно будет использовать целочисленные номера полей (скажем, 5) сцепляются как A-005 или 10/0005


Я знаю, что опаздываю на вечеринку, но я считаю, что zerofill полезен для булевых представлений TINYINT (1). Null не всегда означает False, иногда вы этого не хотите. Путем обнуления tinyint вы эффективно преобразуете эти значения в INT и удаляете любое приложение путаницы ur, которое может иметь при взаимодействии. Затем приложение может обрабатывать эти значения аналогично примитивному типу данных True = Not (0)


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 для числового столбца, MySQL автоматически добавляет атрибут UNSIGNED к столбцу.

числовые типы данных, разрешающие атрибут UNSIGNED, также разрешают SIGNED. Однако эти типы данных подписаны по умолчанию, поэтому подписанный атрибут не имеет никакого эффекта.

выше описание взято с официального сайта MYSQL.


ZEROFILL

это по существу означает, что если целое значение 23 вставлено в столбец INT шириной 8, то остальная часть доступной позиции будет автоматически дополнена нулями.

отсюда

23

будет:

00000023

при использовании совместно с необязательный (нестандартный) атрибут Если заполнение по умолчанию пробелы заменяются нулями. Для например, для столбца, объявленного как INT (4) ZEROFILL, значение 5 полученные в качестве 0005.

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