phpMyAdmin
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> phpMyAdmin

Tại sao TINYINT (1) hoạt động như một boolean nhưng INT (1) thì không?

(1) trong ngoặc đơn cho kiểu số nguyên MySQL không liên quan gì đến phạm vi giá trị được kiểu dữ liệu chấp nhận hoặc cách nó được lưu trữ. Nó chỉ để trưng bày.

Xem thêm câu trả lời của tôi cho Các loại trong MySQL:BigInt (20) so với Int (20), v.v. .

TINYINT không khác với TINYINT (1) hoặc TINYINT (2) hoặc TINYINT (64). Đó là kiểu dữ liệu số nguyên có dấu 8 bit và nó chấp nhận bất kỳ giá trị số nguyên 8 bit nào từ -128 đến 127.

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

mysql> insert into b values (42);

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

Để thuận tiện, MySQL hỗ trợ một bí danh cho BOOL, bí danh này được thay thế ngay lập tức bằng 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

Như tôi đã nói, việc sử dụng (1) hầu như không có ý nghĩa gì, đó chỉ là quy ước để nếu bạn thấy TINYINT (1) thì có thể cho rằng cột là dự định được sử dụng như một boolean. Nhưng không có gì trong MySQL ngăn bạn lưu trữ các giá trị số nguyên khác trong đó.

Nếu bạn muốn một cột chấp nhận chỉ 0 hoặc 1, bạn có thể sử dụng 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

Tuy nhiên, điều này không tiết kiệm bất kỳ dung lượng nào so với TINYINT, vì dung lượng cho một cột nhất định làm tròn đến byte gần nhất.

Tái bút:Mặc dù có câu trả lời từ @ samdy1, TINYINT không lưu trữ chuỗi '0' hoặc '1' ở tất cả, nó lưu trữ số nguyên 0 hoặc 1 , cũng như các số nguyên khác từ -128 đến 127. Không cần thiết phải trích dẫn số nguyên trong SQL và tôi thường khó hiểu tại sao nhiều nhà phát triển lại làm như vậy.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Lỗi # 1046 - Không có cơ sở dữ liệu nào được chọn nhập SQL trên XAMPP

  2. # 1142 - Lệnh SELECT bị từ chối đối với người dùng '' @ 'localhost' cho bảng 'pma_table_uiprefs'

  3. MYSQL - Cảnh báo:# 1681 Chiều rộng hiển thị số nguyên không được dùng nữa

  4. PHP myAdmin - Thay đổi thứ tự trường (Di chuyển lên hoặc xuống)

  5. Kiến thức cơ bản về PHP - Nơi lưu trữ mật khẩu MySQL được PHP sử dụng