MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как работи WEIGHT_STRING() в MariaDB

В MariaDB, WEIGHT_STRING() е вградена функция, която връща низа за тегло за входния низ. Връщаната стойност е двоичен низ, който представлява стойността за сравнение и сортиране на низа.

Ако входният низ е недвоична стойност, връщаната стойност съдържа теглото за съпоставяне на низа. Ако е двоична стойност, резултатът е същият като входния низ. Това е така, защото теглото за всеки байт в двоичен низ е стойността на байта.

Тази функция е функция за отстраняване на грешки, предназначена за вътрешна употреба. Може да се използва за тестване и отстраняване на грешки при съпоставяне.

Синтаксис

Синтаксисът е така:

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

По-долу е описание на всеки аргумент/клауза.

AS Клауза

Незадължителният AS Клаузата позволява прехвърляне на входния низ към двоичен или недвоичен низ, както и към определена дължина.

  • AS BINARY(N) измерва дължината в байтове, а не в знаци, и прави полета с 0x00 байта до желаната дължина.
  • AS CHAR(N) измерва дължината в знаци и десните подложки с интервали до желаната дължина.

N има минимална стойност от 1 и ако е по-малък от дължината на входния низ, низът се съкращава без предупреждение.

LEVEL Клауза

Указва, че връщаната стойност трябва да съдържа тегла за конкретни нива на съпоставяне.

 levels спецификаторът може да бъде или едно цяло число, списък от цели числа, разделен със запетая, или диапазон от цели числа, разделени с тире (прабелът се игнорира). Целите числа могат да варират от 1 до максимум 6 , в зависимост от съпоставянето и трябва да бъдат изброени във възходящ ред.

  • Ако LEVEL клауза не е предоставена, по подразбиране е 1 до максимума за съпоставянето се приема.
  • Ако LEVEL е посочен без използване на диапазон, разрешен е незадължителен модификатор.
  • ASC (по подразбиране) връща теглата без никакви промени.
  • DESC връща побитово-инвертирани тегла.
  • REVERSE връща теглата в обратен ред.

Пример

Ето един основен пример:

SELECT HEX(WEIGHT_STRING('z')); 

Резултат:

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

Тук използваме HEX() функция за представяне на непечатаеми резултати в шестнадесетичен формат.

AS Клауза

Ето пример за използване на AS клауза за прехвърляне на входния низ към даден тип и дължина.

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

Резултат (с помощта на вертикален изход):

 Знак 3:005A00200020 Знак 8:005A0020002000200020002000200020 Двоичен 3:7A0000 Двоичен 8:7A00000000000000

Сравняване

Следващите два примера демонстрират как низ може да има различно тегло низ, в зависимост от използваното съпоставяне.

Съпоставянето, използвано в първия пример, е независимо от главните букви. Съпоставянето, използвано във втория пример, е чувствително.

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

Резултат:

<пред>+--------+----------+--------------+| Низ | Шестнадесетичен | Тегло низ |+--------+----------+--------------+| ИГРАЙ | 504C4159 | 8F7941AA || играй | 706C6179 | 8F7941AA |+--------+---------+--------------+

И ето същият пример, с изключение на съпоставяне, чувствително към главни букви.

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

Резултат:

<пред>+--------+----------+--------------+| Низ | Шестнадесетичен | Тегло низ |+--------+----------+--------------+| ИГРАЙ | 504C4159 | 8F7941AA || играй | 706C6179 | 907A42AB |+--------+---------+--------------+

Нулеви аргументи

Предаването на null връща null :

SELECT WEIGHT_STRING(null); 

Резултат:

+---------------------+| WEIGHT_STRING(нула) |+---------------------+| NULL |+---------------------+

Липсващи аргументи

Извикване на WEIGHT_STRING() с грешен брой аргументи или без подаване на аргументи води до грешка:

SELECT WEIGHT_STRING(); 

Резултат:

ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 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. Как да разположите MariaDB сървър в Docker контейнер

  2. MariaDB JSON функции

  3. Сравнение на висока наличност на база данни - MySQL / MariaDB репликация срещу Oracle Data Guard

  4. Как EXTRACT() работи в MariaDB

  5. Как ADDTIME() работи в MariaDB