Я просто хочу знать, в чем преимущество/использование определения 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 является действительным zipcode для munic, 01067 является почтовым индексом Берлина.
Как вы видите, любой гражданин Германии ожидает, что zipcodes будут отображаться как 5-значный код, поэтому 1067 выглядит странно.
Чтобы сохранить эти данные, вы можете использовать ZEROFILL VARCHAR (5) или INT (5), тогда как целое число с нулевым значением имеет два больших преимущества:
Возможно, этот пример помогает понять использование ZEROFILL.
Это особенность для нарушенных личностей, которые любят квадратные квадратики.
Вставьте
1
23
123
но когда вы выберете, он набрасывает значения
000001
000023
000123
Это помогает в правильной сортировке в случае, если вам нужно конкатенировать это "целое число" с чем-то другим (другим номером или текстом), которое затем будет сортироваться как "текст".
например,
если вам нужно будет использовать число целых чисел (скажем, 5) конкатенировано как A-005 или 10/0005
Я знаю, что опаздываю на вечеринку, но я считаю, что zerofill полезен для булевых представлений TINYINT (1). Null не всегда означает False, иногда вы этого не хотите. Завершив tinyint, вы эффективно конвертируете эти значения в INT и удаляете любое приложение, которое может возникнуть при взаимодействии. Затем ваше приложение может обрабатывать эти значения способом, подобным примитивному типу данных 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. Однако эти типы данных по умолчанию подписаны, поэтому атрибут SIGNED не имеет эффекта.
Выше описание взято с официального сайта MYSQL.
ZEROFILL
Это по существу означает, что если целочисленное значение 23 вставляется в столбец INT с шириной 8, то остальная часть доступного положения будет автоматически дополняться нулями.
Следовательно
23
становится:
00000023
При использовании в сочетании с необязательный (нестандартный) атрибут ZEROFILL, заполнение по умолчанию пробелы заменяются нулями. Для Например, для столбца, объявленного как INT (4) ZEROFILL, значение 5 равно извлекается как 0005.