Skip to content

2.4 Fixed vs Variable Text in Databases

ใน Module 0.4 เราเรียนว่า CHAR(n) จองพื้นที่ตายตัว VARCHAR(n) ยืดหยุ่น ตอนนี้ถึงเวลาดูลึกขึ้น — เมื่อไหร่ใช้อะไร และมี TEXT อีก type ที่คนมักลืม

3 วิธีเก็บ text ใน SQL

Section titled “3 วิธีเก็บ text ใน SQL”
Typeพื้นที่ขีดจำกัดเหมาะกับ
CHAR(n)จอง n bytes เสมอสูงสุด ~255 (ขึ้นอยู่กับ dialect)ค่าที่ยาวเท่ากันเสมอ
VARCHAR(n)ใช้ตามจริง + 1-2 bytes overheadสูงสุด ~65,535ค่าที่ยาวไม่เท่ากัน แต่มีขีดจำกัด
TEXTใช้ตามจริงสูงสุด ~1 GB+ (ขึ้นอยู่กับ dialect)เนื้อหายาวมาก (notes, articles)
CHAR(2): 'TH' → เก็บ 'TH' (2 bytes พอดี)
CHAR(2): 'T' → เก็บ 'T ' (เติม space ให้ครบ 2)
CHAR(2): 'USA' → ERROR! (เกิน 2 ตัวอักษร)

ใช้เมื่อ: ค่าทุกแถวมีความยาวเท่ากันเสมอ

  • รหัสประเทศ ISO: CHAR(2)'TH', 'US', 'JP'
  • รหัสสกุลเงิน: CHAR(3)'THB', 'USD', 'JPY'
  • เพศ: CHAR(1)'M', 'F', 'X'

VARCHAR(n) — ยืดหยุ่นแต่มีขีดจำกัด

Section titled “VARCHAR(n) — ยืดหยุ่นแต่มีขีดจำกัด”
VARCHAR(100): 'Ploy' → เก็บ 4 chars + length info
VARCHAR(100): 'Ploy Srisuwan' → เก็บ 13 chars + length info
VARCHAR(100): (99 chars) → ได้
VARCHAR(100): (101 chars) → ERROR หรือ truncate!

ใช้เมื่อ: ค่ามีความยาวไม่เท่ากัน แต่มีขอบเขตที่เหมาะสม

  • ชื่อ: VARCHAR(100)
  • email: VARCHAR(254) (RFC 5321 จำกัดที่ 254 chars)
  • เบอร์โทร: VARCHAR(20)
  • URL: VARCHAR(2048)

TEXT — ไม่จำกัดความยาว (เกือบ)

Section titled “TEXT — ไม่จำกัดความยาว (เกือบ)”
TEXT: 'บทความยาว 10,000 ตัวอักษร...' → ได้
TEXT: 'เนื้อหา 1 ล้านตัวอักษร...' → ได้

ใช้เมื่อ: ไม่รู้ขีดจำกัดของความยาว หรือเนื้อหาอาจยาวมาก

  • คอมเมนต์ / review
  • บทความ / blog post
  • JSON data
  • log messages

Sheets ไม่มีความแตกต่าง CHAR/VARCHAR/TEXT — ทุก cell รับ text ยาวแค่ไหนก็ได้ (สูงสุด ~50,000 characters ต่อ cell)

แต่คุณจำลองได้:

A (ชื่อ column)B (type)C (ตัวอย่างค่า)D (validation)
country_codeCHAR(2)TH=IF(LEN(C1)=2,"OK","ผิดความยาว!")
nameVARCHAR(50)Ploy Srisuwan=IF(LEN(C2)<=50,"OK","ยาวเกิน!")
bioTEXT(ข้อความยาวๆ)=LEN(C3)&" chars"

ลอง Data Validation:

  1. เลือก column C สำหรับ country_code
  2. ไปที่ Data → Data validation
  3. ตั้ง Custom formula: =LEN(C1)=2
  4. ลองพิมพ์ THA → จะแจ้งเตือน!

นี่คือสิ่งที่ SQL ทำให้อัตโนมัติ แต่ Sheets ต้องตั้ง validation เอง

แผนภาพตัดสินใจ

Section titled “แผนภาพตัดสินใจ”

ถามตัวเอง 3 คำถาม:

  1. ความยาวเท่ากันเสมอไหม?

    • ใช่ → CHAR(n) (เช่น country code, currency code)
    • ไม่ → ไปข้อ 2
  2. รู้ขีดจำกัดที่เหมาะสมไหม?

    • ใช่ → VARCHAR(n) (เช่น ชื่อ ≤ 100, email ≤ 254)
    • ไม่ → ไปข้อ 3
  3. เนื้อหาอาจยาวมากไหม?

    • ใช่ → TEXT (เช่น bio, comment, article)