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

Cách hàm OCTET_LENGTH () hoạt động trong MySQL

Trong MySQL, OCTET_LENGTH() hàm trả về độ dài của một chuỗi, được đo bằng byte.

Hàm này thực sự là một từ đồng nghĩa của LENGTH() .

Cú pháp

Cú pháp cơ bản như sau:

OCTET_LENGTH(str)

Ở đâu str là chuỗi mà bạn muốn độ dài được trả về.

Ví dụ

SELECT OCTET_LENGTH('Cat');

Kết quả:

+---------------------+
| OCTET_LENGTH('Cat') |
+---------------------+
|                   3 |
+---------------------+

Đây là kết quả tương tự mà chúng tôi sẽ nhận được nếu chúng tôi sử dụng CHAR_LENGTH() hàm số. Tuy nhiên, OCTET_LENGTH() hàm có thể trả về các kết quả khác nhau, tùy thuộc vào kiểu dữ liệu.

Loại dữ liệu

Khi bạn truy vấn cơ sở dữ liệu, OCTET_LENGTH() hàm có thể trả về một kết quả khác, tùy thuộc vào kiểu dữ liệu. Chuỗi Unicode trả về gấp đôi số byte. Chuỗi UTF-8 có thể khác nhau.

Dưới đây là một ví dụ về việc sử dụng UTF-8:

SELECT 
  CHAR_LENGTH(_utf8 '€'),
  OCTET_LENGTH(_utf8 '€');

Kết quả:

+--------------------------+---------------------------+
| CHAR_LENGTH(_utf8 '€')   | OCTET_LENGTH(_utf8 '€')   |
+--------------------------+---------------------------+
|                        1 |                         3 |
+--------------------------+---------------------------+

Trong trường hợp này, độ dài ký tự là 1, nhưng độ dài bộ tám là 3 byte.

Trong ví dụ sau, chúng tôi truy vấn một cơ sở dữ liệu. Trong trường hợp này, ArtistName cột sử dụng varchar (255) kiểu dữ liệu:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Vì vậy, kết quả trông như thế này:

+--------------------------+
| OCTET_LENGTH(ArtistName) |
+--------------------------+
|                        3 |
+--------------------------+

Tuy nhiên, nếu chúng tôi thay đổi cột thành ucs2 , mỗi ký tự sẽ được biểu diễn bằng mã Unicode 2 byte, và do đó kết quả sẽ khác nhau.

Để chứng minh, chúng ta có thể thay đổi bảng như sau:

SELECT OCTET_LENGTH(ArtistName) 
ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;

Bây giờ nếu chúng ta truy vấn lại nó:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Kết quả:

+--------------------------+
| OCTET_LENGTH(ArtistName) |
+--------------------------+
|                        6 |
+--------------------------+

Khoảng trống sau

OCTET_LENGTH() hàm đếm khoảng trống ở cuối (chẳng hạn như khoảng trắng ở cuối chuỗi). Vì vậy, nếu chúng ta thêm một khoảng trắng vào cuối ví dụ đầu tiên, chúng ta sẽ nhận được kết quả sau:

SELECT LENGTH('Cat ');

Kết quả:

+----------------+
| LENGTH('Cat ') |
+----------------+
|              4 |
+----------------+

Khoảng trống hàng đầu

Chúng tôi nhận được cùng một kết quả với các ô trống ở đầu (ví dụ:khoảng trắng ở đầu chuỗi):

SELECT LENGTH('Cat ');

Kết quả:

+----------------+
| LENGTH('Cat ') |
+----------------+
|              4 |
+----------------+

Tất nhiên, trừ khi chúng tôi sử dụng một hàm như TRIM() , RTRIM() hoặc LTRIM() để cắt bỏ khoảng trắng.

Ví dụ:

SELECT LENGTH(RTRIM('Cat '));

Kết quả:

+-----------------------+
| LENGTH(RTRIM('Cat ')) |
+-----------------------+
|                     3 |
+-----------------------+

Các ví dụ khác

Dưới đây là một số ví dụ về các chuỗi khác nhau:

SELECT 
  OCTET_LENGTH('Quiet Riot') AS 'Result 1',
  OCTET_LENGTH('') AS 'Result 2',
  OCTET_LENGTH('1234  7') AS 'Result 3',
  OCTET_LENGTH('   ') AS 'Result 4',
  OCTET_LENGTH(TRIM('   ')) AS 'Result 5';

Kết quả:

+----------+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 | Result 5 |
+----------+----------+----------+----------+----------+
|       10 |        0 |        7 |        3 |        0 |
+----------+----------+----------+----------+----------+

Lưu ý rằng kết quả 4 và 5 khác nhau vì tôi đã sử dụng TRIM() hàm để cắt bỏ khoảng trắng khỏi kết quả 5. Xem như chuỗi chỉ bao gồm khoảng trắng, độ dài của chuỗi được cắt là 0 .

Transact-SQL (dành cho SQL Server, Azure) có chức năng tương tự như LENGTH() của MySQL và OCTET_LENGTH() nhưng trong T-SQL nó được gọi là DATALENGTH() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL không thể thêm ràng buộc khóa ngoại

  2. Sự khác biệt giữa SET autocommit =1 và BẮT ĐẦU GIAO DỊCH trong mysql (Tôi đã bỏ lỡ điều gì đó?)

  3. Truy vấn chọn máy chủ chéo MySQL

  4. Truy vấn SELECT trả về 1 hàng từ mỗi nhóm

  5. mysql_fetch_row () so với mysql_fetch_assoc () so với mysql_fetch_array ()