Hàm MySQL LENGTH () đo độ dài chuỗi bằng ‘byte’, có nghĩa là nó không an toàn nhiều byte. Sự khác biệt của kết quả giữa các hàm an toàn nhiều byte, như CHAR_LENGTH () hoặc CHARACTER_LENGTH () và hàm LENGTH () đặc biệt liên quan đến Unicode, trong đó hầu hết các ký tự được mã hóa thành hai byte hoặc có liên quan cho UTF-8 trong đó số lượng byte khác nhau. Ví dụ:nếu một chuỗi chứa bốn ký tự 2 byte thì hàm LENGTH () sẽ trả về 8, trong khi hàm CHAR_LENGTH () hoặc CHARACTER_LENGTH () sẽ trả về 4. Điều này được minh họa trong ví dụ bên dưới -
Ví dụ
mysql> Select LENGTH('tutorialspoint'); +--------------------------+ | LENGTH('tutorialspoint') | +--------------------------+ | 14 | +--------------------------+ 1 row in set (0.00 sec)
Bộ kết quả trên cho thấy độ dài của chuỗi ‘tutorialspoint’ là 14 vì nó chưa được chuyển đổi sang ký tự Unicode. Truy vấn sau chuyển nó thành ký tự Unicode -
mysql> SET @A = CONVERT('tutorialspoint' USING ucs2); Query OK, 0 rows affected (0.02 sec)
Sau khi chuyển đổi chuỗi trong Unicode, nó cho kết quả 28 thay vì 14 vì trong Unicode một ký tự đơn chiếm 2 byte như hình dưới đây -
mysql> Select LENGTH(@A); +------------+ | LENGTH(@A) | +------------+ | 28 | +------------+ 1 row in set (0.00 sec)
Nhưng CHAR_LENGTH () cho kết quả là 14 vì nó là hàm an toàn nhiều byte như hình dưới đây -
mysql> Select CHAR_LENGTH(@A); +-----------------+ | CHAR_LENGTH(@A) | +-----------------+ | 14 | +-----------------+ 1 row in set (0.00 sec)