В чем преимущество zerofill в MySQL? - PullRequest
151 голосов
/ 10 марта 2011

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

`id` INT UNSIGNED ZEROFILL NOT NULL 

Ответы [ 9 ]

232 голосов
/ 10 марта 2011

Когда вы выбираете столбец с типом 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
125 голосов
/ 18 июля 2012

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

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

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

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

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

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

58 голосов
/ 10 марта 2011

Это функция для обеспокоенных личностей, которым нравятся квадратные квадраты.

Вы вставляете

1
23
123 

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

000001
000023
000123
15 голосов
/ 25 августа 2013

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

например,

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

3 голосов
/ 10 июня 2015
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 голосов
/ 06 сентября 2012

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

1 голос
/ 20 мая 2012

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

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

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

1 голос
/ 10 марта 2011

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

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

0 голосов
/ 10 марта 2011

ZEROFILL

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

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

23

становится:

00000023
...