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

อะไรคือความแตกต่างระหว่างฟังก์ชัน MySQL LENGTH () และ CHAR_LENGTH ()


ทั้งสองฟังก์ชันเป็นฟังก์ชันสตริงและส่งคืนจำนวนอักขระที่มีอยู่ในสตริง แต่พวกเขาต่างกันในแนวคิดที่ว่าฟังก์ชัน CHAR_LENGTH() จะวัดความยาวของสตริงใน 'อักขระ' ในขณะที่ฟังก์ชัน LENGTH() จะวัดความยาวของสตริงเป็น 'ไบต์' กล่าวอีกนัยหนึ่ง เราสามารถพูดได้ว่าฟังก์ชัน CHAR_LENGTH() มีความปลอดภัยแบบหลายไบต์ กล่าวคือ ไม่สนใจว่าอักขระเป็นแบบไบต์เดียวหรือหลายไบต์ ตัวอย่างเช่น หากสตริงมีอักขระ 2 ไบต์สี่ตัว LENGTH()

ฟังก์ชันจะคืนค่า 8 ในขณะที่ฟังก์ชัน CHAR_LENGTH() จะคืนค่า 4 ในแง่นี้ เราสามารถพูดได้ว่า CHAR_LENGTH() ให้ผลลัพธ์ที่แม่นยำกว่าฟังก์ชัน LENGTH()

ความแตกต่างนี้มีความเกี่ยวข้องเป็นพิเศษกับ Unicode ซึ่งอักขระส่วนใหญ่เข้ารหัสเป็นสองไบต์หรือเกี่ยวข้องกับ UTF-8 โดยที่จำนวนไบต์แตกต่างกันไป ดังตัวอย่างด้านล่าง −

ตัวอย่าง

ในตัวอย่างนี้ อย่างแรกเลย สตริง "Gaurav" จะถูกแปลงเป็น ucs2 นั่นคือ Unicode และมีอักขระ 2 ไบต์ ชุดอักขระ จากนั้นเราสามารถสังเกตความแตกต่างจากชุดผลลัพธ์ เช่น LENGTH() ส่งคืนค่าความยาวเป็นจำนวนไบต์ และ CHAR_LENGTH() ส่งคืนค่าความยาวเป็นจำนวนอักขระ

mysql> SET @A = CONVERT('Gaurav' USING ucs2);
Query OK, 0 rows affected (0.15 sec)

mysql> Select Char_length(@A), LENGTH(@A);

+-----------------+------------+
| Char_length(@A) | LENGTH(@A) |
+-----------------+------------+
| 6               | 12         |
+-----------------+------------+

1 row in set (0.03 sec)

และในตัวอย่างด้านล่าง เรากำลังใช้อักขระพิเศษใน UTF-8 จำนวนไบต์แตกต่างกันไป ชุดอักขระ จากนั้นเราสามารถสังเกตความแตกต่างจากชุดผลลัพธ์ได้

mysql> SET @B = CONVERT('©' USING utf8);
Query OK, 0 rows affected (0.15 sec)

mysql> Select CHAR_LENGTH(@B);

+-----------------------+
| CHAR_LENGTH(@B)       |
+-----------------------+
| 1                     |
+-----------------------+

1 row in set (0.00 sec)

mysql> Select LENGTH(@B);

+---------------+
| LENGTH(@B)    |
+---------------+
| 2             |
+---------------+

1 row in set (0.00 sec)