MySql: Tinyint (2) vs tinyint (1) - fark nedir?


183

MySQL'de Boole biliyordum tinyint (1).

Bugün gibi tanımlanmış bir tamsayı olan bir tabloya bakın tinyint(2)ve aynı zamanda başkalarının gibi int(4), int(6)...

İnteger ve tinyint türünde boyut ne demektir?


4
MySQL Tamsayı veri türleri hakkında buradan bilgi edinebilirsiniz .
Bud Damyanov

2
@ AamirR'ın cevabı doğru cevap
evilReiko

1
@evilReiko sıfır dolgusu, değerin nasıl saklandığı konusunda da bir fark yaratmaz, gerçekten sunumla ilgilidir ... boşluklar veya sıfırlar, kimsenin cevabının
imo'sunun

Yanıtlar:


94

Ekran genişliği anlamına gelir

Tinyint (1) veya tinyint (2) kullansanız da, herhangi bir fark yaratmaz.

Her zaman tinyint (1) ve int (11) kullanıyorum, birkaç mysql istemcisi (navicat, sequel pro) kullandım.

TÜMÜNDE hiçbir şey ifade etmiyor! Bir test yaptım, tüm istemciler veya hatta komut satırı istemcisi bunu görmezden geliyor gibi görünüyor.

Ancak, seçenek kullanıyorsanız ekran genişliği çok önemlidir ZEROFILL, örneğin tablonuzda şu 2 sütun bulunur:

Bir Tinyint (2) zerofill

B tinyint (4) sıfır dolgu

Her iki sütun 1 değerine sahiptir, kolon çıkış A olur 01ve 0001için B , ekran görüldüğü gibi, aşağıda :)

görüntüleme genişliği ile sıfır doldurma


20
Garip bir şekilde C # resmi MySQL bağlayıcısında tinyint (1) hiçbir zaman 0 ve 1'den farklı değerler döndürmediğini keşfettim. Sadece bir kafa yukarı bazen önemlidir.
Daniel Sharp

Mümkün olduğunca küçük bir tamsayı türü ve uzunluğu kullanmak daha iyi değil mi? Ben MySQL bu hafıza kaydetti izlenimi altındaydı.
nclsvh

@ Daniel-Sharp'ın belirttiği gibi konektörler için önemli görünebilir. Hibernate ile JDBC raporlamasını kullanarak bir sorun yaşadım, bir TINYINT'i (1) BIT olarak yorumladı.
sfj

2
@DanielSharp, muhtemelen varsayılan olarak true olan tinyInt1isBit bağlantı seçeneğinden kaynaklanmaktadır. Bkz. Dev.mysql.com/doc/connector-j/8.0/en/…
Parisbre56

1
Her zaman bunun kabul edilen sayı miktarı ile ilgisi olduğunu düşündüm (örneğin, int (4) 9999'un üzerinde hiçbir şeye izin vermiyor). Sanırım hep yanlış düşünmüştüm. Hem PHP hem de MySQL komut satırında üstündeki değeri iyi görüyorum.
Joshua Bakker

226

(m)Sütunu görüntüleme genişliğini belirtir; MySQL istemcisi gibi uygulamalar, sorgu sonuçlarını gösterirken bunu kullanır.

Örneğin:

| v   | a   |  b  |   c |
+-----+-----+-----+-----+
| 1   | 1   |  1  |   1 |
| 10  | 10  | 10  |  10 |
| 100 | 100 | 100 | 100 |

Burada a, bve ckullandığınız TINYINT(1), TINYINT(2)ve TINYINT(3)sırasıyla. Gördüğünüz gibi, ekran genişliğini kullanarak sol taraftaki değerleri doldurur.

Belirli bir tür için kabul edilen değer aralığını etkilemediğini, yani TINYINT(1)yine de kabul ettiğini not etmek önemlidir [-128 .. 127].


16
'sütun genişliği' ne demek ??
realtebo

8
@realtebo çoğunlukla mysql komut satırı istemcisi tarafından görüntüleme amacıyla kullanılır.
Ja͢ck

3
Arayüz tarafından gösterilen "basamak" sayısı. Başka bir deyişle, soldaki sıfırları doldurur. Bu tür bir özellik, veritabanlarının ilk günlerinde bir anlam ifade ediyordu, ancak şimdi sadece miras.
Denilson Sá Maia

2
@Kailas Eğer mysql istemcisini kullanmıyorsanız? Hiç yok.
Ja͢ck

11
@Kailas Hayır! tinyint (1) sadece 0-9 kabul etmiyor. Tinyint'in tutabileceği tüm aralığı kabul eder.
Ja͢ck

18
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)

11
Lütfen biraz açıklama eklemek için cevabınızı düzenleyin. Sadece kod yanıtları gelecekteki SO okuyucularını eğitmek için çok az şey yapar. Cevabınız düşük kaliteli olduğu için denetleme kuyruğunda.
mickmackusa

14

INT, TINYINT Hakkında ... Bunlar farklı veri türleridir, INT 4 bayt sayıdır, TINYINT 1 bayt sayıdır. Daha fazla bilgi burada - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .

TINYINT veri türünün sözdizimi TINYINT (M) şeklindedir; burada M maksimum görüntüleme genişliğini gösterir (yalnızca MySQL istemciniz destekliyorsa kullanılır).

Sayısal Tür Nitelikleri .


1
'ekran genişliği' ne demek?
realtebo

2
Referanstan - Örneğin, INT (4), ekran genişliği dört basamaklı bir INT belirtir. Bu isteğe bağlı ekran genişliği, uygulamalar tarafından sütun için belirtilen genişlikten daha düşük bir genişliğe sahip tamsayı değerlerini boşluklarla sorarak doldurarak görüntülemek için kullanılabilir.
Devart

2
Ancak bu özelliği kullanan uygulamalar veya MySQL istemcileri görmedim. Her zaman INT (11) kullanıyorum ve çıktıyı özelleştirmek için biçimlendirme işlevlerini kullanıyorum.
Devart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.