sql >> Databáze >  >> Database Tools >> phpMyAdmin

Proč TINYINT(1) funguje jako boolean, ale INT(1) ne?

(1) v závorkách pro celočíselný typ MySQL nemá nic společného s rozsahem hodnot akceptovaných datovým typem nebo s tím, jak je uložen. Je to pouze pro zobrazení.

Viz také moje odpověď na Zadejte MySQL:BigInt(20) vs Int(20) atd .

TINYINT se neliší od TINYINT(1) nebo TINYINT(2) nebo TINYINT(64). Je to datový typ 8bitového celého čísla se znaménkem a přijímá jakoukoli 8bitovou celočíselnou hodnotu od -128 do 127.

mysql> create table b (i tinyint(1));

mysql> insert into b values (42);

mysql> select * from b;
+------+
| i    |
+------+
|   42 |
+------+

Pro pohodlí MySQL podporuje alias pro BOOL, který je okamžitě nahrazen 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

Jak jsem řekl, použití (1) neznamená téměř nic, je to pouze konvence, takže pokud uvidíte TINYINT(1), je rozumné předpokládat, že sloupec je zamýšlený být použit jako boolean. Ale nic v MySQL vám nebrání v tom ukládat další celočíselné hodnoty.

Pokud chcete, aby sloupec akceptoval pouze 0 nebo 1, můžete použít 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

To však nešetří místo ve srovnání s TINYINT, protože úložiště pro daný sloupec se zaokrouhluje na nejbližší bajt nahoru.

PS:Navzdory odpovědi od @samdy1 TINYINT neukládá řetězce '0' nebo '1' vůbec, ukládá celá čísla 0 nebo 1 , stejně jako další celá čísla od -128 do 127. V SQL není nutné citovat celá čísla a často si lámu hlavu nad tím, proč to tolik vývojářů dělá.



  1. Chyba odstranění řádku sql

  2. phpMyAdmin Chyba při zpracování požadavku Kód chyby:500 Text chyby:Interní chyba serveru

  3. jak napsat postup pro vložení dat do tabulky v phpmyadmin?

  4. Chyba phpmyadmin k importu nebyla přijata, jak to opravit?