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

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

`id` INT UNSIGNED ZEROFILL NOT NULL 

Ответ 1

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

Ответ 2

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

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

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

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

  • Лот меньше места на жестком диске
  • Если вы вставляете 1067, вы все равно получаете 01067 назад

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

Ответ 3

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

Вставьте

1
23
123 

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

000001
000023
000123

Ответ 4

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

например,

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

Ответ 5

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

Ответ 6

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)

Ответ 7

Если вы указываете ZEROFILL для числового столбца, MySQL автоматически добавляет атрибут UNSIGNED в столбец.

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

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

Ответ 8

ZEROFILL

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

Следовательно

23

становится:

00000023

Ответ 9

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

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