Sadece DataType ZEROFILL
için tanımlamanın yarar / kullanımı nedir bilmek istiyorum ?INT
MySQL
`id` INT UNSIGNED ZEROFILL NOT NULL
Sadece DataType ZEROFILL
için tanımlamanın yarar / kullanımı nedir bilmek istiyorum ?INT
MySQL
`id` INT UNSIGNED ZEROFILL NOT NULL
Yanıtlar:
Türü olan bir sütun seçtiğinizde ZEROFILL
, alanın görüntülenen değerini sütun tanımında belirtilen ekran genişliğine kadar sıfırlarla doldurur. Ekran genişliğinden daha uzun değerler kesilmez. Kullanımının ZEROFILL
da ima ettiğini unutmayın UNSIGNED
.
ZEROFILL
Ve bir ekran genişliği kullanmanın verilerin nasıl depolanacağı üzerinde hiçbir etkisi yoktur. Yalnızca görüntülenme şeklini etkiler.
İşte kullanımını gösteren bazı örnek 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;
Sonuç:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
Kullanımının ZEROFILL
ilginç olabileceğini anlamak için bir örnek :
Almanya'da 5 haneli posta kodlarımız var. Bununla birlikte, bu Kodlar Sıfır ile başlayabilir, bu nedenle 80337
üniforma için geçerli 01067
bir posta kodu, Berlin'in bir posta kodu.
Gördüğünüz gibi, herhangi bir Alman vatandaşı posta kodlarının 5 haneli bir kod olarak görüntülenmesini bekliyor, bu yüzden 1067
garip görünüyor.
Bu verileri saklamak için a VARCHAR(5)
veya INT(5) ZEROFILL
sıfır kullanabilirsiniz, ancak sıfır dolu tamsayı iki büyük avantaja sahiptir:
1067
, yine de 01067
geri dönersinizBelki bu örnek, kullanımının anlaşılmasına yardımcı olur ZEROFILL
.
Kare kutuları seven rahatsız kişilikler için bir özellik.
Siz ekleyin
1
23
123
ancak seçtiğinizde, değerleri doldurur
000001
000023
000123
Partiye geç kaldığımı biliyorum ama sıfır dolgunun TINYINT'in (1) boole gösterimleri için yararlı olduğunu düşünüyorum. Null her zaman Yanlış anlamına gelmez, bazen istemezsiniz. Bir tinyint'i sıfır doldurarak, bu değerleri etkili bir şekilde INT'ye dönüştürürsünüz ve uygulamanın etkileşimi üzerine gelebilecek karışıklıkları ortadan kaldırırsınız. Daha sonra uygulamanız bu değerleri ilkel veri tipine benzer bir şekilde işleyebilir True = Not (0)
666
bu yüzden bu yanıtı olduğu gibi tutmayı tercih ederim;-)
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)
İsteğe bağlı (standart dışı) ZEROFILL özniteliğiyle birlikte kullanıldığında, boşlukların varsayılan dolgusu sıfırlarla değiştirilir. Örneğin, INT (4) ZEROFILL olarak bildirilen bir sütun için 5 değeri 0005 olarak alınır.
Sayısal bir sütun için ZEROFILL belirtirseniz, MySQL otomatik olarak UNSIGNED özniteliğini sütuna ekler.
UNSIGNED özniteliğine izin veren sayısal veri türleri de SIGNED'e izin verir. Ancak, bu veri türleri varsayılan olarak imzalanmıştır, bu nedenle SIGNED özniteliğinin bir etkisi yoktur.
Yukarıdaki açıklama MYSQL resmi web sitesinden alınmıştır.
zerofill
standart dışı olduğunu da belirtmelidir . " Bir sütun ifadeler ya katılır zaman nitelik göz ardı edilir sorgular. Eğer sahip bir tamsayı sütun ekran genişliğinden daha büyük değerler saklıyorsanız niteliğini MySQL komplike bazı birleştirmeler için geçici tablolar oluşturur sorunlarla karşılaşabilirsiniz. Bu durumlarda , MySQL veri değerlerinin sütun görüntüleme genişliği içinde olduğunu varsayar. "ZEROFILL
UNION
ZEROFILL