В MySQL, WEIGHT_STRING()
функцията връща низа за тегло за входния низ. Връщаната стойност е двоичен низ, който представлява стойността за сравнение и сортиране на низа.
Ако входният низ е недвоична стойност, връщаната стойност съдържа теглата за съпоставяне за низа. Ако е двоична стойност, резултатът е същият като входния низ. Това е така, защото теглото за всеки байт в двоичен низ е стойността на байта.
Тази функция е функция за отстраняване на грешки, предназначена за вътрешна употреба. Може да се използва за тестване и отстраняване на грешки на съпоставяне. Имайте предвид, че поведението му може да се променя между версиите на MySQL.
Синтаксис
Синтаксисът е така:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [знамена])
Където str
е входният низ. Незадължителният AS
клаузата ви позволява да прехвърляте входния низ към даден тип и дължина. Незадължителните flags
Аргументът в момента не се използва в MySQL (от версия 8.0).
Пример 1 – Основна употреба
Ето основен пример за използване с недвоичен входен низ:
ИЗБЕРЕТЕ HEX(WEIGHT_STRING('Котка'));
Резултат:
+---------------------+| HEX(WEIGHT_STRING('Котка')) |+---------------------------+| 1C7A1C471E95 |+------------------------------+
Имайте предвид, че използвам HEX()
функция за показване на WEIGHT_STRING()
резултат. Това е така, защото WEIGHT_STRING()
връща двоичен резултат. Можем да използваме HEX()
за да покажете резултата във форма за печат.
Ако не използвам HEX()
в този пример получавам това:
SELECT WEIGHT_STRING('Котка');
Резултат:
+---------------------+| WEIGHT_STRING('Котка') |+---------------------+| з г? |+---------------------+
Така че само за да стане ясно, ето низа, шестнадесетичното представяне на този низ и шестнадесетичното представяне на низа му за тегло:
SET @str ='Котка';ИЗБЕРЕТЕ @str, HEX(@str), HEX(WEIGHT_STRING(@str));
Резултат:
+------+-----------+-------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |+------+-----------+--------------------- -----+| Котка | 436174 | 1C7A1C471E95 |+------+-----------+--------------------------+предварително>Пример 2 – Клауза AS
Ето пример за използване на
AS
клауза за прехвърляне на входния низ към даден тип и дължина.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 КАТО BINARY(3))) 'Бинарно 3', HEX(WEIGHT_STRING(@str КАТО BINARY(8))) 'Двоично 8';Резултат:
+--------------+--------------+----------+----- ------------+| Char 3 | Char 8 | Двоичен 3 | Двоичен 8 |+--------------+--------------+---------+----- ------------+| 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 |+--------------+--------------+---------+------ ------------+Пример 3 – Съпоставяне
Следващите два примера демонстрират как низ може да има различно тегло низ, в зависимост от използваното съпоставяне. Съпоставянето, използвано в първия пример, е нечувствително към ударение и без значение на главния и малки букви. Съпоставянето, използвано във втория пример, е чувствително за акцент и малки букви.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_ci;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Тегло String'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));Резултат:
+--------+-------+--------------+| Низ | Шестнадесетичен | Тегло низ |+--------+-------+--------------+| КОТКА | 434154 | 1C7A1C471E95 || котка | 636174 | 1C7A1C471E95 |+-------+-------+--------------+И ето същият пример, с изключение на съпоставяне, чувствително на ударение и малки букви.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_as_cs;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Тегло String'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));Резултат:
+--------+-------+---------------------------- ------------------+| Низ | Шестнадесетичен | Тегло низ |+--------+-------+---------------------------- ------------------+| КОТКА | 434154 | 1C7A1C471E9500000020002000200000000800080008 || котка | 636174 | 1C7A1C471E9500000020002000200000000200020002 |+--------+--------+---------------------------- -----------------+