Я просто хочу знати , що користь / використання визначення ZEROFILL
для INT
ТіпДанних в MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Я просто хочу знати , що користь / використання визначення ZEROFILL
для INT
ТіпДанних в 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
виглядає дивно.
Для того , щоб зберігати ці дані, ви можете використовувати VARCHAR(5)
або в INT(5) ZEROFILL
той час як zerofilled ціле має дві великі переваги:
1067
, ви все одно 01067
повернетесьМожливо, цей приклад допомагає зрозуміти використання ZEROFILL
.
Це особливість для порушених особистостей, які люблять квадратні коробки.
Ви вставляєте
1
23
123
але коли ви вибираєте, він вкладає значення
000001
000023
000123
Це допомагає в правильному сортуванні в тому випадку, якщо вам потрібно буде поєднати це "ціле число" з чимось іншим (іншим числом або текстом), яке тоді буде потрібно сортувати як "текст".
наприклад,
якщо вам потрібно буде використовувати цілі числа номерів полів (скажімо 5), об'єднані як A-005 або 10/0005
Я знаю, що я спізнююсь на вечірку, але я вважаю, що нульова заповнення корисна для бульних уявлень TINYINT (1). Null не завжди означає False, іноді цього не хочеться. Здійснюючи нульове заповнення крихітного відтінку, ви ефективно перетворюєте ці значення в INT і видаляєте будь-яку плутанину ур-програми при взаємодії. Тоді ваша програма може обробляти ці значення таким же чином, як і примітивний тип даних True = Не (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 не має ефекту.
Вищеописаний опис взято з офіційного веб-сайту MYSQL.
zerofill
це нестандартно. " Атрибут ігнорується , якщо стовпець бере участь у виразах або запитів. Якщо ви зберігаєте значення великі , ніж ширина дисплея в целочисленном стовпці , який має атрибут, то можуть виникнути проблеми , коли MySQL генерує тимчасові таблиці для деяких складних з'єднань. У цих випадках , MySQL припускає, що значення даних вписуються в ширину відображення стовпця ".ZEROFILL
UNION
ZEROFILL