Tanda (1) dalam tanda kurung untuk tipe integer MySQL tidak ada hubungannya dengan rentang nilai yang diterima oleh tipe data, atau cara penyimpanannya. Ini hanya untuk tampilan.
Lihat juga jawaban saya untuk Ketik MySQL:BigInt(20) vs Int(20) dll .
TINYINT tidak berbeda dengan TINYINT(1) atau TINYINT(2) atau TINYINT(64). Ini adalah tipe data integer bertanda 8-bit, dan menerima nilai integer 8-bit dari -128 hingga 127.
mysql> create table b (i tinyint(1));
mysql> insert into b values (42);
mysql> select * from b;
+------+
| i |
+------+
| 42 |
+------+
Untuk kenyamanan, MySQL mendukung alias untuk BOOL, yang segera digantikan oleh TINYINT(1).
mysql> create table b2 (i bool);
mysql> show create table b2;
CREATE TABLE `b2` (
`i` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Seperti yang saya katakan, penggunaan (1) hampir tidak berarti apa-apa, itu hanya konvensi sehingga jika Anda melihat TINYINT(1) masuk akal untuk menganggap kolom tersebut dimaksudkan untuk digunakan sebagai boolean. Tapi tidak ada di MySQL yang mencegah Anda menyimpan nilai integer lainnya di dalamnya.
Jika Anda ingin kolom menerima hanya 0 atau 1, Anda dapat menggunakan BIT(1):
mysql> create table b3 (i bit(1));
mysql> insert into b3 values (0), (1);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into b3 values (-1);
ERROR 1406 (22001): Data too long for column 'i' at row 1
mysql> insert into b3 values (2);
ERROR 1406 (22001): Data too long for column 'i' at row 1
Ini tidak menghemat ruang dibandingkan dengan TINYINT, karena penyimpanan untuk kolom tertentu dibulatkan ke byte terdekat.
PS:Meskipun ada jawaban dari @samdy1, TINYINT tidak menyimpan string '0'
atau '1'
sama sekali, ia menyimpan bilangan bulat 0
atau 1
, serta bilangan bulat lainnya dari -128 hingga 127. Tidak perlu mengutip bilangan bulat dalam SQL, dan saya sering bingung mengapa begitu banyak pengembang melakukannya.