phpMyAdmin
 sql >> база данни >  >> Database Tools >> phpMyAdmin

Защо TINYINT(1) функционира като булева, а INT(1) не?

(1) в скоби за MySQL целочислен тип няма нищо общо с диапазона от стойности, приети от типа данни, или как се съхранява. Това е само за показване.

Вижте също моя отговор на Типове в MySQL:BigInt(20) срещу Int(20) и т.н. .

TINYINT не се различава от TINYINT(1) или TINYINT(2) или TINYINT(64). Това е 8-битов подписан целочислен тип данни и приема всяка 8-битова целочислена стойност от -128 до 127.

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

mysql> insert into b values (42);

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

За удобство MySQL поддържа псевдоним за BOOL, който се заменя незабавно с 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

Както казах, използването на (1) не означава почти нищо, това е само конвенция, така че ако видите TINYINT(1), е разумно да приемем, че колоната е предназначена да се използва като булев. Но нищо в MySQL не ви пречи да съхранявате други целочислени стойности в него.

Ако искате колона да приема само 0 или 1, можете да използвате 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

Това обаче не спестява място в сравнение с TINYINT, тъй като паметта за дадена колона се закръгля до най-близкия байт.

PS:Въпреки отговора от @samdy1, TINYINT не съхранява низове '0' или '1' изобщо, той съхранява цели числа 0 или 1 , както и други цели числа от -128 до 127. Няма нужда да цитирате цели числа в SQL и често съм озадачен защо толкова много разработчици го правят.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Как да търся в MySQL база данни за конкретно име на колона?

  2. Основи на PHP - Къде да съхранявате паролата за MySQL, използвана от PHP

  3. session_start():Неуспешно инициализиране на модул за съхранение:memcache (път:/var/lib/php5) в /usr/share/phpmyadmin/libraries/session.inc.php на ред 81

  4. Защо получавам стойности NULL при лявото присъединяване?

  5. MySQL – Защо phpMyAdmin е изключително бавен с тази заявка, която е супер бърза в php/mysqli?