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

ฟังก์ชัน MySQL BIT_LENGTH() เป็นแบบ multi-byte ปลอดภัยหรือไม่?


เช่นเดียวกับฟังก์ชัน LENGTH() ฟังก์ชัน MySQL BIT_LENGTH() ไม่ใช่ฟังก์ชันความปลอดภัยแบบหลายไบต์ ตามที่เราทราบความแตกต่างของผลลัพธ์ระหว่างฟังก์ชันความปลอดภัยแบบหลายไบต์ เช่น CHAR_LENGTH() หรือ CHARACTER_LENGTH() และฟังก์ชัน BIT_LENGTH() เกี่ยวข้องโดยเฉพาะกับ Unicode ซึ่งอักขระส่วนใหญ่เข้ารหัสเป็นสองไบต์หรือเกี่ยวข้องกับ UTF -8 โดยที่จำนวนไบต์แตกต่างกันไป ดังตัวอย่างด้านล่าง −

ตัวอย่าง

mysql> Select BIT_LENGTH('tutorialspoint');
+------------------------------+
| BIT_LENGTH('tutorialspoint') |
+------------------------------+
| 112                          |
+------------------------------+
1 row in set (0.00 sec)

ชุดผลลัพธ์ด้านบนแสดงให้เห็นว่าความยาวบิตของสตริง 'tutorialspoint' คือ 112 เนื่องจากยังไม่ได้แปลงเป็นอักขระ Unicode แบบสอบถามต่อไปนี้แปลงเป็นอักขระ Unicode -

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

หลังจากแปลงสตริงใน Unicode จะให้ผลลัพธ์เป็น 224 แทนที่จะเป็น 112 เนื่องจากใน Unicode อักขระตัวเดียวจะใช้เวลา 2 ไบต์ดังที่แสดงด้านล่าง -

mysql> Select BIT_LENGTH(@A);
+----------------+
| BIT_LENGTH(@A) |
+----------------+
| 224            |
+----------------+
1 row in set (0.00 sec)