Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL length () so với char_length ()

Trong MySQL, có nhiều lần length() và hàm char_length() chức năng sẽ cung cấp các kết quả chính xác như nhau. Tuy nhiên, cũng có những lúc kết quả sẽ hoàn toàn khác. Đây là lý do tại sao.

Đầu tiên, đây là định nghĩa cho từng chức năng sau:

char_length()
Trả về độ dài của một chuỗi, được tính bằng ký tự.
length()
Trả về độ dài của một chuỗi, được tính bằng byte.

Lưu ý “ký tự” so với “byte” - một ký tự được đo bằng ký tự , cái còn lại được đo bằng byte .

Trong nhiều trường hợp, số byte sẽ giống với số ký tự trong chuỗi, nhưng điều này không phải lúc nào cũng đúng. Số byte được sử dụng trên mỗi ký tự phụ thuộc vào cách dữ liệu được lưu trữ. Ví dụ:nếu chuỗi được lưu trữ dưới dạng dữ liệu Unicode, sẽ có 2 byte cho mỗi ký tự.

Dưới đây là một ví dụ cơ bản sử dụng văn bản ASCII (trong đó cả hai hàm đều trả về cùng một kết quả):

SELECT 
    CHAR_LENGTH('Lit'), 
    LENGTH('Lit');

Kết quả:

+--------------------+---------------+
| CHAR_LENGTH('Lit') | LENGTH('Lit') |
+--------------------+---------------+
|                  3 |             3 |
+--------------------+---------------+

Và thường thì chúng ta sẽ nhận được kết quả tương tự nếu chuỗi được lưu trữ trong cơ sở dữ liệu:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Kết quả:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  3 |
+-------------------------+--------------------+

Tuy nhiên, nếu chúng ta thay đổi cột cơ sở dữ liệu để lưu trữ dữ liệu dưới dạng unicode:

ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) unicode;

Và sau đó chạy lại cùng một truy vấn:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Chúng tôi nhận được một kết quả khác:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  6 |
+-------------------------+--------------------+

Điều này là do unicode lưu trữ mỗi ký tự dưới dạng 2 byte.

Điều này tương tự như sự khác biệt giữa datalength()len() trong T-SQL.

MySQL cũng có octet_length() hàm, là từ đồng nghĩa với length() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để giải mã băm mật khẩu trong PHP?

  2. MySQL REPLACE () - Thay thế tất cả các phiên bản của một chuỗi con bằng một chuỗi khác

  3. Thay thế các hàm mysql_ * bằng PDO và các câu lệnh đã chuẩn bị

  4. phpMyAdmin trên MySQL 8.0

  5. Làm việc với MyISAM trong MySQL