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



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



`id` INT UNSIGNED ZEROFILL NOT NULL 
741   9  

9 ответов:

при выборе столбца с типом ZEROFILL он заполняет отображаемое значение поля нулями до ширины отображения, указанной в определении столбца. Значения, превышающие ширину дисплея, не усекаются. Обратите внимание, что использование ZEROFILL также подразумевает UNSIGNED.

использование ZEROFILL и ширины дисплея не влияет на то, как хранятся данные. Это влияет только на то, как она выглядит.

вот пример SQL, который демонстрирует использование Если:

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 является zipcode Берлина.

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

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

  1. много меньше места для хранения на жестком диске
  2. если вы вставите 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 к столбцу.

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

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

ZEROFILL

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

отсюда

23

будет:

00000023

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

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

Comments

    Ничего не найдено.