Ketika kita menggunakan panjang argumen dengan tipe data numerik, sejauh yang saya tahu ini menentukan lebar tampilan.
Saya mencoba yang berikut ini:
mysql> create table boolean_test (var1 boolean, var2 tinyint);
Query OK, 0 rows affected (0.10 sec)
mysql> show create table boolean_test;
+--------------+-------------------------
| Table | Create Table
+--------------+-------------------------
| boolean_test | CREATE TABLE `boolean_test` (
`var1` tinyint(1) DEFAULT NULL,
`var2` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+---------------------------
1 row in set (0.00 sec)
Pertama-tama tinyint adalah nilai 1 byte. Jadi apa artinya tinyint(4)
? Tidak boleh ada 4 digit.
mysql> insert into boolean_test values(101,112);
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+------+
| var1 | var2 |
+------+------+
| 10 | 112 |
| 101 | 112 |
+------+------+
2 rows in set (0.00 sec)
Saya melihat bahwa di tinyint saya menyimpan 10 dan 101 dan saya bisa mendapatkan kembali nilai-nilai ini meskipun itu didefinisikan sebagai tinyint (1).
Bukankah seharusnya saya melihat angka 1 untuk var1
? Yaitu hanya 1 digit tampilan?
Jawaban:
Data-bijaksana,
tinyint(1)
,tinyint(2)
,tinyint(3)
dll semua persis sama. Mereka semua berada dalam kisaran -128 hingga 127 untukSIGNED
atau 0-255 untukUNSIGNED
. Seperti jawaban lain yang dicatat, angka dalam kurung hanyalah petunjuk lebar layar.Anda mungkin ingin mencatat, bahwa aplikasi = hal-hal bijak mungkin terlihat berbeda. Di sini,
tinyint(1)
bisa mengambil makna khusus. Misalnya, Connector / J (konektor Java) memperlakukantinyint(1)
sebagai nilai boolean, dan alih-alih mengembalikan hasil numerik ke aplikasi, itu mengkonversi nilai menjaditrue
danfalse
. ini dapat diubah melaluitinyInt1isBit=false
parameter koneksi.sumber
Smallint (1) dapat menyimpan angka dalam rentang -128 hingga 127, karena datatype menjadi 8 bit (1 byte) - jelas tinyint yang tidak ditandai dapat menyimpan nilai 0-255.
Ini akan secara diam-diam memotong nilai rentang:
... kecuali Anda mengubah
sql_mode
atau mengubah konfigurasi server:Nilai yang digunakan dalam DDL untuk tipe data (misalnya: tinyint (1)), seperti yang Anda duga, lebar layar. Namun, ini opsional dan klien tidak harus menggunakannya. Klien standar MySQL tidak menggunakannya, misalnya.
sumber