Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดูค่า BIT ใน MySQL ให้เห็นค่าจริง (ไม่ใช่ Blank)

คอลัมน์ชนิด BIT ใน MySQL เมื่อ SELECT โดยตรง จะแสดงเป็น **ค่าว่าง (Blank)** หรืออักขระควบคุม เพราะเป็น Binary Data ต้องแปลงเป็นตัวเลขก่อนจึงจะเห็นค่า 0 หรือ 1

วิธีแก้: บวก 0 (Cast เป็น Integer)

SELECT yourBitColumnName + 0 FROM yourTableName;

ตัวอย่างการใช้งาน

1. สร้างตาราง BIT Column

mysql> CREATE TABLE BitDemo (
    -> hasValidId BIT NOT NULL
    -> );
Query OK, 0 rows affected (1.21 sec)

2. เพิ่มข้อมูล 0 และ 1

mysql> INSERT INTO BitDemo VALUES (1);
mysql> INSERT INTO BitDemo VALUES (0);

3. SELECT ปกติ (เห็น Blank)

mysql> SELECT * FROM BitDemo;
+------------+
| hasValidId |
+------------+
|            |
|            |
+------------+
2 rows in set (0.00 sec)

4. SELECT + 0 (เห็นค่าจริง)

mysql> SELECT hasValidId + 0 FROM BitDemo;
+--------------+
| hasValidId+0 |
+--------------+
| 1            |
| 0            |
+--------------+
2 rows in set (0.00 sec)

วิธีอื่นๆ

CAST()

SELECT CAST(hasValidId AS UNSIGNED) FROM BitDemo;

CONV() - แปลงฐาน

SELECT CONV(hasValidId, 2, 10) FROM BitDemo;

BIN() - แสดงเป็น Binary String

SELECT BIN(hasValidId + 0) FROM BitDemo;

BIT vs BOOLEAN vs TINYINT(1)

ชนิดStorageค่าที่รับได้แสดงผล SELECT ตรง
BIT(1)1 bit0, 1Blank (Binary)
BOOLEAN / BOOL1 byte (TINYINT)0, 1 (TRUE/FALSE alias)0 / 1
TINYINT(1)1 byte-128 ถึง 1270 / 1

แนะนำ: ใช้ BOOLEAN หรือ TINYINT(1) แทน BIT(1) สำหรับ Flag ทั่วไป เพราะอ่านง่าย ไม่ต้อง Cast และ Index ทำงานได้ดีกว่า

BIT(M) สำหรับหลาย Bit

CREATE TABLE flags (
    permissions BIT(8)  -- 8 bits = 1 byte
);

INSERT INTO flags VALUES (b'10101010');  -- Binary Literal

SELECT permissions + 0, BIN(permissions + 0) FROM flags;
-- 170, '10101010'

ใช้ b'...' Syntax สำหรับ Binary Literal