Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hàm BIT_LENGTH() trong MySQL có an toàn đa byte (multi-byte safe) không?

Giống LENGTH(), hàm BIT_LENGTH() KHÔNG an toàn đa byte (not multi-byte safe).

Khác biệt với hàm an toàn đa byte như CHAR_LENGTH() hoặc CHARACTER_LENGTH() rõ rệt khi xử lý Unicode (ký tự 2 byte) hoặc UTF-8 (số byte thay đổi).

Ví dụ

mysql> SELECT BIT_LENGTH('tutorialspoint');
+------------------------------+
| BIT_LENGTH('tutorialspoint') |
+------------------------------+
| 112                          |
+------------------------------+

14 ký tự × 8 bit = 112 bit (ASCII 1 byte/ký tự).

Chuyển sang Unicode (UCS-2, 2 byte/ký tự):

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

mysql> SELECT BIT_LENGTH(@A);
+----------------+
| BIT_LENGTH(@A) |
+----------------+
| 224            |
+----------------+

14 ký tự × 16 bit = 224 bit. BIT_LENGTH() tính theo byte thực tế lưu trữ, không theo số ký tự logic.