Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa funkcja WEIGHT_STRING() w MySQL

W MySQL funkcja WEIGHT_STRING() funkcja 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 wagi sortowania dla 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. Zauważ, że jego zachowanie może się zmieniać pomiędzy wersjami MySQL.

Składnia

Składnia wygląda tak:

WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])

Gdzie str jest ciągiem wejściowym. Opcjonalny AS klauzula umożliwia rzutowanie ciągu wejściowego na dany typ i długość. Opcjonalne flags argument nie jest obecnie używany w MySQL (od wersji 8.0).

Przykład 1 – Podstawowe użycie

Oto podstawowy przykład użycia niebinarnego ciągu wejściowego:

SELECT HEX(WEIGHT_STRING('Cat'));

Wynik:

+---------------------------+
| HEX(WEIGHT_STRING('Cat')) |
+---------------------------+
| 1C7A1C471E95              |
+---------------------------+

Zauważ, że używam HEX() funkcja do wyświetlenia WEIGHT_STRING() wynik. Dzieje się tak, ponieważ WEIGHT_STRING() zwraca wynik binarny. Możemy użyć HEX() aby wyświetlić wynik w formie do wydrukowania.

Jeśli nie używam HEX() w tym przykładzie rozumiem:

SELECT WEIGHT_STRING('Cat');

Wynik:

+----------------------+
| WEIGHT_STRING('Cat') |
+----------------------+
| zG?                |
+----------------------+

Żeby było jasne, oto łańcuch, szesnastkowa reprezentacja tego łańcucha i szesnastkowa reprezentacja jego łańcucha wagowego:

SET @str = 'Cat';
SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));

Wynik:

+------+-----------+--------------------------+
| @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |
+------+-----------+--------------------------+
| Cat  | 436174    | 1C7A1C471E95             |
+------+-----------+--------------------------+

Przykład 2 – Klauzula AS

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

SET @str = 'Cat';
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:

+--------------+--------------+----------+------------------+
| Char 3       | Char 8       | Binary 3 | Binary 8         |
+--------------+--------------+----------+------------------+
| 1C7A1C471E95 | 1C7A1C471E95 | 436174   | 4361740000000000 |
+--------------+--------------+----------+------------------+

Przykład 3 – Ukł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. Sortowanie użyte w pierwszym przykładzie jest niewrażliwe na akcent i wielkość liter. Porównywanie użyte w drugim przykładzie uwzględnia akcent i wielkość liter.

SET @upper = _utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_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 |
+--------+--------+---------------+
| CAT    | 434154 | 1C7A1C471E95  |
| cat    | 636174 | 1C7A1C471E95  |
+--------+--------+---------------+

A oto ten sam przykład, z wyjątkiem sortowania uwzględniającego akcent i wielkość liter.

SET @upper = _utf8mb4 'CAT' COLLATE utf8mb4_0900_as_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                                |
+--------+--------+----------------------------------------------+
| CAT    | 434154 | 1C7A1C471E9500000020002000200000000800080008 |
| cat    | 636174 | 1C7A1C471E9500000020002000200000000200020002 |
+--------+--------+----------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pozwól użytkownikom MySQL tworzyć bazy danych, ale zezwalaj na dostęp tylko do własnych baz danych

  2. Używanie unii i kolejności według klauzuli w mysql

  3. CodeIgniter:Nie można połączyć się z serwerem bazy danych przy użyciu dostarczonych ustawień Komunikat o błędzie

  4. Jak połączyć się z bazą danych MySQL w Pythonie?

  5. Skrypt sprawdzania kondycji replikacji MySQL