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

LENGTH() vs CHAR_LENGTH() ใน MySQL: ความแตกต่าง

CHAR_LENGTH() = จำนวน ตัวอักษร (Characters)
LENGTH() = จำนวน ไบต์ (Bytes)

ตัวอย่าง ASCII (ผลเหมือนกัน)

mysql> SELECT CHAR_LENGTH('John'), LENGTH('John');
+---------------------+----------------+
| CHAR_LENGTH('John') | LENGTH('John') |
+---------------------+----------------+
| 4                   | 4              |
+---------------------+

ตัวอย่าง Unicode (UTF-8: 1 Char = 3 Bytes สำหรับภาษาไทย/จีน/ญี่ปุ่น/อีโมจิ)

mysql> CREATE TABLE LengthAndCharLengthDemo (
    -> FirstName VARCHAR(200),
    -> SecondName VARCHAR(255) CHARACTER SET utf8mb4
    -> );

mysql> INSERT INTO LengthAndCharLengthDemo VALUES ('John', 'Ritter');

ถ้า SecondName เก็บภาษาไทย 'สมชาย' (3 ตัวอักษร):

mysql> SELECT CHAR_LENGTH(FirstName), LENGTH(SecondName) 
    -> FROM LengthAndCharLengthDemo 
    -> WHERE FirstName='John' AND SecondName='สมชาย';
+------------------------+--------------------+
| CHAR_LENGTH(FirstName) | LENGTH(SecondName) |
+------------------------+--------------------+
| 4                      | 9                  |
+------------------------+--------------------+

เห็นว่า CHAR_LENGTH = 3 (ตัวอักษร) แต่ LENGTH = 9 (Bytes: 3 chars × 3 bytes)

ตารางเปรียบเทียบ

ฟังก์ชันหน่วยUTF-8 ThaiASCIIใช้เมื่อไหร่
CHAR_LENGTH() / CHARACTER_LENGTH()Characters34นับความยาวข้อความ (User-facing)
LENGTH() / OCTET_LENGTH()Bytes94Storage Size, Network Transfer, Binary Data
Best Practice: ใช้ CHAR_LENGTH() สำหรับ Validation (เช่น "ต้องมากกว่า 5 ตัวอักษร") ใช้ LENGTH() สำหรับ Storage/Buffer Calculation