Chcę tylko wiedzieć, jakie są korzyści / zastosowanie definiowania ZEROFILL
dla INT
DataType w MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Chcę tylko wiedzieć, jakie są korzyści / zastosowanie definiowania ZEROFILL
dla INT
DataType w MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Odpowiedzi:
Po wybraniu kolumny za pomocą typu ZEROFILL
wypełnia on wyświetlaną wartość pola zerami do szerokości wyświetlania określonej w definicji kolumny. Wartości dłuższe niż szerokość wyświetlania nie są obcinane. Zauważ, że użycie ZEROFILL
również implikuje UNSIGNED
.
Używanie ZEROFILL
i szerokość wyświetlania nie ma wpływu na sposób przechowywania danych. Wpływa tylko na sposób wyświetlania.
Oto przykładowy SQL, który demonstruje użycie 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;
Wynik:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
Jeden przykład, aby zrozumieć, gdzie użycie ZEROFILL
może być interesujące:
W Niemczech posiadamy 5-cyfrowe kody pocztowe. Jednak te kody mogą zaczynać się od zera, więc 80337
jest to prawidłowy kod pocztowy dla miasta, 01067
to kod pocztowy Berlina.
Jak widać, każdy obywatel Niemiec oczekuje, że kody pocztowe będą wyświetlane jako 5-cyfrowy kod, więc 1067
wygląda to dziwnie.
Aby zapisać te dane, możesz użyć VARCHAR(5)
lub, INT(5) ZEROFILL
podczas gdy liczba całkowita wypełniona zerami ma dwie duże zalety:
1067
, nadal 01067
wróciszByć może ten przykład pomoże zrozumieć użycie ZEROFILL
.
To funkcja dla niespokojnych osobowości, które lubią kwadratowe pudełka.
Wstawiasz
1
23
123
ale kiedy wybierzesz, wartości są wypełnione
000001
000023
000123
Pomaga w poprawnym sortowaniu w przypadku, gdy będziesz musiał połączyć tę „liczbę całkowitą” z czymś innym (inną liczbą lub tekstem), co będzie wymagało posortowania jako „tekst”.
na przykład,
jeśli będziesz musiał użyć liczb całkowitych pól (powiedzmy 5) połączonych jako A-005 lub 10/0005
Wiem, że spóźniłem się na imprezę, ale uważam, że zerofill jest pomocny w logicznych reprezentacjach TINYINT (1). Null nie zawsze oznacza fałsz, czasami nie chcesz. Wypełniając smallint, skutecznie konwertujesz te wartości na INT i usuniesz wszelkie niejasności, które aplikacja może mieć podczas interakcji. Twoja aplikacja może wtedy traktować te wartości w sposób podobny do pierwotnego typu danych True = Not (0)
666
więc wolałbym zachować tę odpowiedź bez zmian;-)
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)
W połączeniu z opcjonalnym (niestandardowym) atrybutem ZEROFILL, domyślne wypełnienie spacji jest zastępowane zerami. Na przykład dla kolumny zadeklarowanej jako INT (4) ZEROFILL, wartość 5 jest pobierana jako 0005.
Jeśli określisz ZEROFILL dla kolumny numerycznej, MySQL automatycznie doda atrybut UNSIGNED do kolumny.
Liczbowe typy danych, które zezwalają na atrybut UNSIGNED, umożliwiają również PODPISANIE. Jednak te typy danych są domyślnie podpisane, więc atrybut SIGNED nie ma znaczenia.
Powyższy opis pochodzi z oficjalnej strony MYSQL.
zerofill
jest to niestandardowe. " Atrybut jest ignorowany, gdy kolumna jest zaangażowany w wyrażeniach lub zapytaniami. Jeśli przechowywać wartości większych niż szerokość wyświetlacza w kolumnie całkowitą, która ma atrybut, mogą wystąpić problemy podczas MySQL generuje tabele tymczasowe dla niektórych skomplikowane łączy. W tych przypadkach , MySQL zakłada, że wartości danych mieszczą się w szerokości wyświetlania kolumny. ”ZEROFILL
UNION
ZEROFILL