phpMyAdmin
 sql >> Baza danych >  >> Database Tools >> phpMyAdmin

Dlaczego TINYINT(1) działa jako wartość logiczna, a INT(1) nie?

(1) w nawiasach dla typu integer MySQL nie ma nic wspólnego z zakresem wartości akceptowanych przez typ danych ani sposobem ich przechowywania. To tylko do wyświetlania.

Zobacz także moją odpowiedź na Typy w MySQL:BigInt(20) vs Int(20) itp .

TINYINT nie różni się od TINYINT(1), TINYINT(2) lub TINYINT(64). Jest to 8-bitowy ze znakiem typ danych całkowitych i akceptuje każdą 8-bitową liczbę całkowitą od -128 do 127.

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

mysql> insert into b values (42);

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

Dla wygody MySQL obsługuje alias BOOL, który jest natychmiast zastępowany przez 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 powiedziałem, użycie (1) prawie nic nie znaczy, to tylko konwencja, więc jeśli widzisz TINYINT(1), rozsądne jest założenie, że kolumna jest przeznaczona do wykorzystania jako wartość logiczna. Ale nic w MySQL nie uniemożliwia przechowywania w nim innych wartości całkowitych.

Jeśli chcesz, aby kolumna akceptowała tylko 0 lub 1, możesz użyć 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

Nie oszczędza to jednak miejsca w porównaniu z TINYINT, ponieważ pamięć dla danej kolumny jest zaokrąglana do najbliższego bajtu.

PS:Pomimo odpowiedzi od @samdy1, TINYINT nie przechowuje ciągów '0' lub '1' w ogóle przechowuje liczby całkowite 0 lub 1 , a także inne liczby całkowite od -128 do 127. Nie ma potrzeby cytowania liczb całkowitych w SQL i często zastanawia mnie, dlaczego tak wielu programistów to robi.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. zmiana domyślnego adresu URL phpmyadmina

  2. Twórz tabele ze zrzutu SQL wygenerowanego przez phpmyadmina za pomocą kohana

  3. prosta sesja logowania php

  4. Android :czy JDBC jest obsługiwane na urządzeniach z systemem Android?

  5. Zmień tabelę za pomocą zapytania PHP, nazwa kolumny nie wyświetla się w phpMyAdmin