В чем преимущество 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 имеет два больших преимущества:
- много меньше места для хранения на жестком диске
- если вы вставляете 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.