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

Cách WEIGHT_STRING () hoạt động trong MariaDB

Trong MariaDB, WEIGHT_STRING() là một hàm dựng sẵn trả về chuỗi trọng số cho chuỗi đầu vào. Giá trị trả về là một chuỗi nhị phân đại diện cho giá trị so sánh và sắp xếp của chuỗi.

Nếu chuỗi đầu vào là giá trị không nhị phân, giá trị trả về chứa trọng số đối chiếu của chuỗi. Nếu đó là giá trị nhị phân, kết quả sẽ giống với chuỗi đầu vào. Điều này là do trọng số của mỗi byte trong chuỗi nhị phân là giá trị byte.

Chức năng này là một chức năng gỡ lỗi nhằm mục đích sử dụng nội bộ. Nó có thể được sử dụng để kiểm tra và gỡ lỗi các ảnh ghép.

Cú pháp

Cú pháp như sau:

WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
  levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ... 

Dưới đây là mô tả của từng đối số / mệnh đề.

AS Mệnh đề

AS tùy chọn mệnh đề cho phép truyền chuỗi đầu vào thành một chuỗi nhị phân hoặc không phải nhị phân, cũng như một độ dài cụ thể.

  • AS BINARY(N) đo độ dài theo byte chứ không phải ký tự và các miếng đệm bên phải có độ dài mong muốn là 0x00 byte.
  • AS CHAR(N) đo độ dài bằng ký tự và các miếng đệm bên phải có khoảng cách với độ dài mong muốn.

N có giá trị tối thiểu là 1 và nếu nó nhỏ hơn độ dài của chuỗi đầu vào, thì chuỗi đó sẽ bị cắt ngắn mà không có cảnh báo.

LEVEL Mệnh đề

Chỉ định rằng giá trị trả về phải chứa các trọng số cho các mức đối chiếu cụ thể.

Các levels mã xác định có thể là một số nguyên duy nhất, một danh sách các số nguyên được phân tách bằng dấu phẩy hoặc một dải các số nguyên được phân tách bằng dấu gạch ngang (khoảng trắng bị bỏ qua). Các số nguyên có thể nằm trong khoảng từ 1 tối đa là 6 , phụ thuộc vào đối chiếu và cần được liệt kê theo thứ tự tăng dần.

  • Nếu LEVEL mệnh đề không được cung cấp, mặc định là 1 tối đa cho sự đối chiếu được giả định.
  • Nếu LEVEL được chỉ định mà không sử dụng dải ô, công cụ sửa đổi tùy chọn được phép.
  • ASC (mặc định) trả về trọng số mà không có bất kỳ sửa đổi nào.
  • DESC trả về trọng số ngược chiều bit.
  • REVERSE trả về các trọng số theo thứ tự ngược lại.

Ví dụ

Đây là một ví dụ cơ bản:

SELECT HEX(WEIGHT_STRING('z'));

Kết quả:

+-------------------------+
| HEX(WEIGHT_STRING('z')) |
+-------------------------+
| 005A                    |
+-------------------------+

Ở đây, chúng tôi sử dụng HEX() hàm đại diện cho các kết quả không in được ở định dạng thập lục phân.

AS Mệnh đề

Đây là một ví dụ sử dụng AS mệnh đề để truyền chuỗi đầu vào thành một kiểu và độ dài nhất định.

SET @str = 'z';
SELECT 
  HEX(WEIGHT_STRING(@str AS CHAR(3))) 'Char 3',
  HEX(WEIGHT_STRING(@str AS CHAR(8))) 'Char 8',
  HEX(WEIGHT_STRING(@str AS BINARY(3))) 'Binary 3',
  HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binary 8';

Kết quả (sử dụng đầu ra dọc):

  Char 3: 005A00200020
  Char 8: 005A0020002000200020002000200020
Binary 3: 7A0000
Binary 8: 7A00000000000000

Đối chiếu

Hai ví dụ sau đây chứng minh cách một chuỗi có thể có một chuỗi trọng số khác nhau, tùy thuộc vào đối chiếu đang được sử dụng.

Đối chiếu được sử dụng trong ví dụ đầu tiên là không phân biệt chữ hoa chữ thường. Đối chiếu được sử dụng trong ví dụ thứ hai là phân biệt chữ hoa chữ thường.

SET @upper = _latin1 'PLAY' COLLATE latin1_general_ci;
SET @lower = lcase(@upper);
SELECT 
  @upper 'String', 
  HEX(@upper) 'Hex', 
  HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT 
  @lower, 
  HEX(@lower), 
  HEX(WEIGHT_STRING(@lower));

Kết quả:

+--------+----------+---------------+
| String | Hex      | Weight String |
+--------+----------+---------------+
| PLAY   | 504C4159 | 8F7941AA      |
| play   | 706C6179 | 8F7941AA      |
+--------+----------+---------------+

Và đây là ví dụ tương tự, ngoại trừ đối chiếu phân biệt chữ hoa chữ thường.

SET @upper = _latin1 'PLAY' COLLATE latin1_general_cs;
SET @lower = lcase(@upper);
SELECT 
  @upper 'String', 
  HEX(@upper) 'Hex', 
  HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT 
  @lower, 
  HEX(@lower), 
  HEX(WEIGHT_STRING(@lower));

Kết quả:

+--------+----------+---------------+
| String | Hex      | Weight String |
+--------+----------+---------------+
| PLAY   | 504C4159 | 8F7941AA      |
| play   | 706C6179 | 907A42AB      |
+--------+----------+---------------+

Đối số rỗng

Chuyển null trả về null :

SELECT WEIGHT_STRING(null);

Kết quả:

+---------------------+
| WEIGHT_STRING(null) |
+---------------------+
| NULL                |
+---------------------+

Thiếu đối số

Đang gọi WEIGHT_STRING() với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào dẫn đến lỗi:

SELECT WEIGHT_STRING();

Kết quả:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách ABS () hoạt động trong MariaDB

  2. Mẹo để theo dõi MariaDB Cluster

  3. Cách thiết kế một cụm MariaDB được phân phối theo địa lý

  4. Cách hoạt động của COMPRESS () trong MariaDB

  5. Đặt Bộ ký tự và đối chiếu của một cột trong MariaDB