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

เก็บค่าสี CSS (Hex Color) ใน MySQL ใช้ CHAR(6) หรือ VARCHAR(7)


คำตอบ: ใช่ เก็บได้

ค่าสี CSS hex format (เช่น #FF0000) เก็บใน MySQL ได้หลายวิธี

วิธีที่ 1: CHAR(6) - ไม่เก็บ # (แนะนำสำหรับ fixed length)

รูปแบบ

CREATE TABLE colors (
  color_code CHAR(6) NOT NULL
);

ตัวอย่าง

mysql> create table storeCSSColorDemo 
    -> ( 
    -> CSSValue char(6) 
    -> ); 
Query OK, 0 rows affected (0.53 sec)

mysql> insert into storeCSSColorDemo values('FF0000');  -- Red
Query OK, 1 row affected (0.13 sec)
mysql> insert into storeCSSColorDemo values('FFA500');  -- Orange
Query OK, 1 row affected (0.86 sec)
mysql> insert into storeCSSColorDemo values('FFFF00');  -- Yellow
Query OK, 1 row affected (0.19 sec)

mysql> select * from storeCSSColorDemo;
+----------+
| CSSValue |
+----------+
| FF0000   |
| FFA500   |
| FFFF00   |
+----------+

วิธีที่ 2: VARCHAR(7) - เก็บรวม # (เหมาะ nullable)

CREATE TABLE colors (
  color_code VARCHAR(7)  -- #FF0000
);

ตัวอย่าง

INSERT INTO colors VALUES ('#FF0000'), ('#00FF00'), ('#0000FF'), (NULL);

วิธีที่ 3: INT UNSIGNED - เก็บเป็นตัวเลข (ประหยัด space, เร็วสุด)

CREATE TABLE colors (
  color_value INT UNSIGNED NOT NULL  -- 0xFF0000 = 16711680
);

Insert/Select

INSERT INTO colors VALUES (0xFF0000), (0x00FF00), (0x0000FF);

SELECT CONCAT('#', LPAD(HEX(color_value), 6, '0')) AS hex_color FROM colors;
+------------+
| hex_color  |
+------------+
| #FF0000    |
| #00FF00    |
| #0000FF    |
+------------+

เปรียบเทียบ

TypeStorageProsCons
CHAR(6)6 bytesFixed length, เร็ว, ไม่เก็บ #ต้อง concat # ตอนแสดง
VARCHAR(7)1-8 bytesเก็บ # ไว้, nullableVariable length overhead
INT UNSIGNED4 bytesเล็กที่สุด, เร็วสุด, index ดีต้อง convert hex↔int
BINARY(3)3 bytesเล็กที่สุด (3 bytes = 24 bits)อ่านยาก, ต้อง UNHEX()

Application Level: Validation

-- Trigger validate hex color
CREATE TRIGGER validate_color 
BEFORE INSERT ON colors
FOR EACH ROW
BEGIN
  IF NEW.color_code NOT REGEXP '^[0-9A-Fa-f]{6}$' THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid hex color';
  END IF;
END;

CSS Named Colors

หากต้องการเก็บ named colors (red, blue, transparent) ใช้ VARCHAR(20) แทน

สรุป: CHAR(6) สำหรับ hex only, VARCHAR(7) สำหรับ hex+#, INT UNSIGNED สำหรับ performance คู่อันดับ 1