MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak działa WEIGHT_STRING() w MariaDB

W MariaDB WEIGHT_STRING() to wbudowana funkcja, która zwraca ciąg wagi dla ciągu wejściowego. Wartość zwracana to ciąg binarny, który reprezentuje wartość porównywania i sortowania ciągu.

Jeśli ciąg wejściowy jest wartością niebinarną, wartość zwracana zawiera wagę sortowania ciągu. Jeśli jest to wartość binarna, wynik jest taki sam jak ciąg wejściowy. Dzieje się tak, ponieważ waga każdego bajtu w ciągu binarnym jest wartością bajtu.

Ta funkcja jest funkcją debugowania przeznaczoną do użytku wewnętrznego. Może być używany do testowania i debugowania sortowania.

Składnia

Składnia wygląda tak:

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

Poniżej znajduje się opis każdego argumentu/klauzuli.

AS Klauzula

Opcjonalny AS Klauzula zezwala na rzutowanie ciągu wejściowego na ciąg binarny lub niebinarny, a także o określonej długości.

  • AS BINARY(N) mierzy długość w bajtach, a nie w znakach, a prawe pady z 0x00 bajtami do pożądanej długości.
  • AS CHAR(N) mierzy długość w znakach, a prawe pady ze spacjami do żądanej długości.

N ma minimalną wartość 1 , a jeśli jest mniejsza niż długość ciągu wejściowego, ciąg jest obcinany bez ostrzeżenia.

LEVEL Klauzula

Określa, że ​​zwracana wartość powinna zawierać wagi dla określonych poziomów sortowania.

levels specyfikator może być pojedynczą liczbą całkowitą, listą liczb całkowitych oddzielonych przecinkami lub zakresem liczb całkowitych oddzielonych myślnikiem (białe znaki są ignorowane). Liczby całkowite mogą wynosić od 1 maksymalnie do 6 , w zależności od sortowania i muszą być wymienione w porządku rosnącym.

  • Jeśli LEVEL klauzula nie jest podana, domyślnie 1 do maksimum dla porównania.
  • Jeśli LEVEL jest określony bez użycia zakresu, dozwolony jest opcjonalny modyfikator.
  • ASC (domyślnie) zwraca wagi bez żadnych modyfikacji.
  • DESC zwraca wagi odwrócone bitowo.
  • REVERSE zwraca wagi w odwrotnej kolejności.

Przykład

Oto podstawowy przykład:

SELECT HEX(WEIGHT_STRING('z'));

Wynik:

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

Tutaj używamy HEX() funkcja do reprezentowania wyników niedrukowalnych w formacie szesnastkowym.

AS Klauzula

Oto przykład użycia AS klauzula do rzutowania ciągu wejściowego na podany typ i długość.

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';

Wynik (przy użyciu wyjścia pionowego):

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

Składanie

Poniższe dwa przykłady pokazują, jak ciąg może mieć inny ciąg wagi, w zależności od użytego sortowania.

W sortowaniu użytym w pierwszym przykładzie nie jest rozróżniana wielkość liter. W sortowaniu użytym w drugim przykładzie rozróżniana jest wielkość liter.

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));

Wynik:

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

A oto ten sam przykład, z wyjątkiem sortowania z rozróżnianiem wielkości liter.

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));

Wynik:

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

Argumenty zerowe

Przekazywanie null zwraca null :

SELECT WEIGHT_STRING(null);

Wynik:

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

Brakujące argumenty

Wywołanie WEIGHT_STRING() z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:

SELECT WEIGHT_STRING();

Wynik:

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. Migracja Amazon RDS (MySQL lub MariaDB) na serwer lokalny

  2. Jak REGEXP_INSTR() działa w MariaDB

  3. Wdrażanie usługi Nextcloud o wysokiej dostępności za pomocą MySQL Galera Cluster i GlusterFS

  4. Jak działa RTRIM() w MariaDB

  5. Jak WEEK() działa w MariaDB