Я просто хочу знать, в чем выгода / использование определения ZEROFILL
для INT
DataType MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Я просто хочу знать, в чем выгода / использование определения ZEROFILL
для INT
DataType MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Ответы:
Когда вы выбираете столбец с типом, 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-значный почтовый индекс. Однако эти коды могут начинаться с нуля, поэтому 80337
действительный почтовый индекс для munic 01067
- это почтовый индекс Берлина.
Как видите, любой гражданин Германии ожидает, что почтовые индексы будут отображаться в виде 5-значного кода, поэтому 1067
выглядит странно.
Чтобы сохранить эти данные, вы можете использовать a VARCHAR(5)
или INT(5) ZEROFILL
тогда как целое число с нулевым заполнением имеет два больших преимущества:
1067
, вы все равно 01067
вернетесьМожет быть, этот пример помогает понять использование ZEROFILL
.
Это особенность для обеспокоенных личностей, которые любят квадратные коробки.
Вы вставляете
1
23
123
но когда вы выбираете, он дополняет значения
000001
000023
000123
Это помогает в правильной сортировке в том случае, если вам нужно объединить это «целое число» с чем-то другим (другим числом или текстом), которое затем необходимо будет отсортировать как «текст».
например,
если вам нужно будет использовать число целочисленного поля (скажем , 5) сцепляются , как A-005 или 10/0005
Я знаю, что опаздываю на вечеринку, но считаю, что нулевое заполнение полезно для логических представлений TINYINT (1). Нуль не всегда означает Ложь, иногда вы этого не хотите. За счет нулевого заполнения tinyint вы эффективно конвертируете эти значения в INT и удаляете любые путаницы, которые могут возникнуть у приложения при взаимодействии. Затем ваше приложение может обрабатывать эти значения аналогично примитиву типа True = Not (0)
666
таком, поэтому я предпочел бы оставить этот ответ как есть;-)
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 заполнение пробелов по умолчанию заменяется нулями. Например, для столбца, объявленного как INT (4) ZEROFILL, значение 5 извлекается как 0005.
Если вы указываете ZEROFILL для числового столбца, MySQL автоматически добавляет атрибут UNSIGNED в столбец.
Числовые типы данных, которые разрешают атрибут UNSIGNED, также разрешают SIGNED. Однако эти типы данных подписаны по умолчанию, поэтому атрибут SIGNED не имеет никакого эффекта.
Приведенное выше описание взято с официального сайта MYSQL.
zerofill
это нестандартно. " Атрибут игнорируется , если столбец участвует в выражениях или запросов. Если вы сохраняете значения большие , чем ширина дисплея в целочисленном столбце , который имеет атрибут, то могут возникнуть проблемы , когда MySQL генерирует временные таблицы для некоторых сложных соединений. В этих случаях MySQL предполагает, что значения данных вписываются в ширину отображения столбца. "ZEROFILL
UNION
ZEROFILL