Sadece DataType ZEROFILLiçin tanımlamanın yarar / kullanımı nedir bilmek istiyorum ?INTMySQL
`id` INT UNSIGNED ZEROFILL NOT NULL
Sadece DataType ZEROFILLiçin tanımlamanın yarar / kullanımı nedir bilmek istiyorum ?INTMySQL
`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 ZEROFILLda ima ettiğini unutmayın UNSIGNED.
ZEROFILLVe 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 ZEROFILLilginç 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 01067bir 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 1067garip görünüyor.
Bu verileri saklamak için a VARCHAR(5)veya INT(5) ZEROFILLsıfır kullanabilirsiniz, ancak sıfır dolu tamsayı iki büyük avantaja sahiptir:
1067, yine de 01067geri 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)
666bu 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.
zerofillstandart 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. "ZEROFILLUNIONZEROFILL