phpMyAdmin
 sql >> Teknologi Basis Data >  >> Database Tools >> phpMyAdmin

Mengapa TINYINT(1) berfungsi sebagai boolean tetapi INT(1) tidak?

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.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. MySQL:Pilihan saat ini tidak berisi kolom unik. Fitur edit kisi, kotak centang, Edit, Salin, dan Hapus tidak tersedia

  2. COMMIT tidak berfungsi di phpmyadmin (MySQL)

  3. MySQL LOAD DATA LOCAL INFILE hanya mengimpor satu baris

  4. Tidak Dapat Menginisialisasi mbstring dengan PHP 7

  5. SQL QUERY PADA TABEL GANDA