Ich möchte nur wissen, welchen Nutzen / welche Verwendung das Definieren ZEROFILL
für INT
DataType in hat MySQL
.
`id` INT UNSIGNED ZEROFILL NOT NULL
Ich möchte nur wissen, welchen Nutzen / welche Verwendung das Definieren ZEROFILL
für INT
DataType in hat MySQL
.
`id` INT UNSIGNED ZEROFILL NOT NULL
Antworten:
Wenn Sie eine Spalte mit Typ auswählen ZEROFILL
, wird der angezeigte Wert des Felds mit Nullen bis zur in der Spaltendefinition angegebenen Anzeigebreite aufgefüllt. Werte, die länger als die Anzeigebreite sind, werden nicht abgeschnitten. Beachten Sie, dass die Verwendung von ZEROFILL
auch impliziert UNSIGNED
.
Die Verwendung ZEROFILL
und eine Anzeigebreite haben keinen Einfluss darauf, wie die Daten gespeichert werden. Es wirkt sich nur darauf aus, wie es angezeigt wird.
Hier ist ein Beispiel für SQL, das die Verwendung von Folgendes demonstriert 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;
Ergebnis:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
Ein Beispiel, um zu verstehen, wo die Verwendung von ZEROFILL
interessant sein könnte:
In Deutschland haben wir 5-stellige Postleitzahlen. Diese Codes können jedoch mit einer Null beginnen. Dies 80337
ist eine gültige Postleitzahl für Munic.01067
eine Postleitzahl von Berlin.
Wie Sie sehen, erwartet jeder deutsche Staatsbürger, dass die Postleitzahlen als 5-stellige Code angezeigt werden 1067
sieht also seltsam aus.
Um diese Daten zu speichern, können Sie ein VARCHAR(5)
oder verwenden, INT(5) ZEROFILL
während die nullgefüllte Ganzzahl zwei große Vorteile hat:
1067
, erhalten Sie immer noch 01067
zurückVielleicht hilft dieses Beispiel beim Verständnis der Verwendung von ZEROFILL
.
Es ist eine Funktion für gestörte Persönlichkeiten, die quadratische Kästchen mögen.
Sie fügen ein
1
23
123
Wenn Sie jedoch auswählen, werden die Werte aufgefüllt
000001
000023
000123
Es hilft bei der korrekten Sortierung, wenn Sie diese "Ganzzahl" mit etwas anderem (einer anderen Zahl oder einem anderen Text) verketten müssen, das dann als "Text" sortiert werden muss.
beispielsweise,
wenn Sie die Integer - Feld Zahlen verwenden müssen (sie 5 sagen) verketteten als A-005 oder 10/0005
Ich weiß, dass ich zu spät zur Party komme, aber ich finde, dass die Nullfüllung für boolesche Darstellungen von TINYINT (1) hilfreich ist. Null bedeutet nicht immer Falsch, manchmal möchte man es nicht. Indem Sie einen winzigen Wert auf Null setzen, konvertieren Sie diese Werte effektiv in INT und beseitigen alle Verwirrungen, die Ihre Anwendung bei der Interaktion haben kann. Ihre Anwendung kann diese Werte dann ähnlich wie den primitiven Datentyp True = Not (0) behandeln.
666
also würde ich es vorziehen, diese Antwort so zu belassen, wie sie ist;-)
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)
In Verbindung mit dem optionalen (nicht standardmäßigen) Attribut ZEROFILL wird das standardmäßige Auffüllen von Leerzeichen durch Nullen ersetzt. Für eine als INT (4) ZEROFILL deklarierte Spalte wird beispielsweise der Wert 5 als 0005 abgerufen.
Wenn Sie ZEROFILL für eine numerische Spalte angeben, fügt MySQL der Spalte automatisch das Attribut UNSIGNED hinzu.
Numerische Datentypen, die das Attribut UNSIGNED zulassen, erlauben auch SIGNED. Diese Datentypen sind jedoch standardmäßig signiert, sodass das Attribut SIGNED keine Auswirkung hat.
Die obige Beschreibung stammt von der offiziellen MYSQL-Website.
zerofill
nicht dem Standard entspricht. " DasZEROFILL
Attribut wird ignoriert, wenn eine Spalte an Ausdrücken oderUNION
Abfragen beteiligt ist. Wenn Sie Werte, die größer als die Anzeigebreite sind, in einer Ganzzahlspalte mit demZEROFILL
Attribut speichern , können Probleme auftreten, wenn MySQL temporäre Tabellen für einige komplizierte Verknüpfungen generiert. In diesen Fällen , MySQL geht davon aus, dass die Datenwerte in die Spaltenanzeigebreite passen. "