ป้ายกำกับ: String Types

String Types (TEXT, VARCHAR, CHAR & Collation Handling)String Types (TEXT, VARCHAR, CHAR & Collation Handling)

ในโลกของการพัฒนาฐานข้อมูล การจัดการข้อมูลที่เป็นข้อความ (String Data) ถือเป็นหัวใจหลัก เพราะมันคือข้อมูลที่ผู้ใช้โต้ตอบด้วยและเป็นแหล่งข้อมูลสำคัญที่สุดในการวิเคราะห์ อย่างไรก็ตาม การจัดเก็บและการเปรียบเทียบข้อความเหล่านี้ไม่ใช่เรื่องง่าย เนื่องจากความซับซ้อนของภาษา ตัวอักษร (Character Sets) และกฎเกณฑ์ทางวัฒนธรรมที่ส่งผลต่อการจัดเรียง (Sorting) และการเปรียบเทียบ (Comparison)

String Data Types ใน PostgreSQL: ข้อแตกต่างที่ต้องรู้

สำหรับผู้ที่ทำงานกับ PostgreSQL การทำความเข้าใจประเภทข้อมูลสตริงพื้นฐานอย่าง TEXT, VARCHAR, และ CHAR เป็นรากฐานสำคัญที่ช่วยให้คุณออกแบบ Schema ได้อย่างมีประสิทธิภาพ โดยแต่ละชนิดมีกลไกการจัดเก็บและการใช้งานที่แตกต่างกัน:

1. TEXT (Character Varying)

เป็นประเภทที่แนะนำที่สุดสำหรับการจัดเก็บข้อความทั่วไป เนื่องจาก PostgreSQL ใช้การจัดสรรพื้นที่แบบแปรผัน (Variable Length) และไม่มีการจำกัดความยาวสูงสุดที่ชัดเจน เหมาะสำหรับเก็บเนื้อหาบทความ ข้อมูลคำอธิบาย หรือข้อความที่มีความยาวไม่แน่นอน

2. VARCHAR(n) (Character Varying)

ใช้เพื่อระบุข้อความที่มีความยาวแปรผัน แต่คุณต้องการกำหนดขีดจำกัดความยาวสูงสุด (n) เพื่อควบคุมการใช้พื้นที่และป้องกันการใส่ข้อมูลที่ยาวเกินไป

3. CHAR(n) (Character Fixed)

ใช้สำหรับข้อมูลที่มีความยาวคงที่เสมอ ไม่ว่าข้อมูลจริงจะสั้นแค่ไหน PostgreSQL จะจองพื้นที่เต็ม n และเติมช่องว่าง (Padding) ให้โดยอัตโนมัติ เหมาะสำหรับรหัสมาตรฐาน (Standard Codes) ที่มีความยาวตายตัว เช่น รหัสประเทศ 2 ตัวอักษร

หัวใจสำคัญ: การจัดการ Collation (การเปรียบเทียบภาษา)

นอกจากประเภทการจัดเก็บแล้ว สิ่งที่วิศวกรฐานข้อมูลต้องให้ความสำคัญคือ Collation Collation คือชุดกฎเกณฑ์ที่กำหนดวิธีการเปรียบเทียบ (Comparison) และการเรียงลำดับ (Sorting) ของตัวอักษร ซึ่งเป็นสิ่งที่สำคัญกว่าแค่การเก็บข้อมูล

โดยค่าเริ่มต้น PostgreSQL อาจใช้ Collation ที่ขึ้นอยู่กับระบบปฏิบัติการ (System Default) ซึ่งอาจทำให้เกิดปัญหาเมื่อต้องจัดการกับภาษาที่มีความซับซ้อน เช่น:

  • Case Sensitivity: การแยกแยะระหว่างตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (‘Apple’ $ eq$ ‘apple’)
  • Accent Sensitivity: การแยกแยะระหว่างตัวอักษรที่มีและไม่มีเครื่องหมายกำกับ (เช่น ‘é’ กับ ‘e’)

คุณสามารถบังคับใช้กฎเกณฑ์เหล่านี้ได้โดยการระบุ Collation ในคำสั่ง CREATE TABLE หรือ ALTER TABLE

SQL

-- ตัวอย่างการสร้างตารางที่บังคับ Collation ให้เป็นแบบไม่คำนึงถึงตัวพิมพ์เล็ก/ใหญ่ (Case-Insensitive) ของภาษาอังกฤษ US
CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL COLLATE "und-u-ks-level2"
);

-- ตัวอย่างการค้นหาที่ใช้ Collation เพื่อให้การค้นหาไม่สนใจตัวพิมพ์เล็ก/ใหญ่
SELECT * FROM products WHERE product_name COLLATE "und-u-ks-level2" = 'apple';

บทสรุปและแนวปฏิบัติที่ดีที่สุด (Best Practices)

การเลือกใช้ String Data Type ที่เหมาะสมจะช่วยเพิ่มประสิทธิภาพในการจัดเก็บและ Querying ได้อย่างมาก:

  1. เมื่อไม่รู้ความยาวแน่นอน: ใช้ TEXT เสมอ
  2. เมื่อต้องการจำกัดความยาว: ใช้ VARCHAR(n)
  3. เมื่อความยาวต้องคงที่จริง ๆ: ใช้ CHAR(n)
  4. เมื่อต้องจัดการกับหลายภาษา: อย่าลืมระบุ COLLATE ที่เหมาะสมกับภาษาและภูมิภาคของข้อมูลนั้น ๆ เพื่อให้มั่นใจว่าการเปรียบเทียบและการเรียงลำดับข้อมูลเป็นไปตามกฎเกณฑ์ทางภาษาที่ถูกต้อง