In MariaDB WEIGHT_STRING()
ist eine integrierte Funktion, die die Gewichtszeichenfolge für die Eingabezeichenfolge zurückgibt. Der Rückgabewert ist ein binärer String, der den Vergleichs- und Sortierwert des Strings darstellt.
Wenn die Eingabezeichenfolge ein nichtbinärer Wert ist, enthält der Rückgabewert die Sortierungsgewichtung der Zeichenfolge. Wenn es sich um einen Binärwert handelt, ist das Ergebnis dasselbe wie die Eingabezeichenfolge. Dies liegt daran, dass die Gewichtung für jedes Byte in einer binären Zeichenfolge der Bytewert ist.
Diese Funktion ist eine Debugging-Funktion, die für den internen Gebrauch bestimmt ist. Es kann zum Testen und Debuggen von Sortierungen verwendet werden.
Syntax
Die Syntax lautet wie folgt:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Unten finden Sie eine Beschreibung jedes Arguments/jeder Klausel.
Der AS
Klausel
Der optionale AS
-Klausel ermöglicht das Umwandeln der Eingabezeichenfolge in eine binäre oder nicht-binäre Zeichenfolge sowie in eine bestimmte Länge.
AS BINARY(N)
misst die Länge in Bytes statt in Zeichen und füllt rechts mit 0x00 Bytes auf die gewünschte Länge auf.AS CHAR(N)
misst die Länge in Zeichen und füllt mit Leerzeichen die gewünschte Länge auf.
N
hat einen Mindestwert von 1
, und wenn sie kleiner als die Länge der Eingabezeichenfolge ist, wird die Zeichenfolge ohne Warnung abgeschnitten.
Der LEVEL
Klausel
Gibt an, dass der Rückgabewert Gewichtungen für bestimmte Sortierebenen enthalten soll.
Die levels
Bezeichner kann entweder eine einzelne Ganzzahl, eine durch Kommas getrennte Liste von Ganzzahlen oder eine Reihe von Ganzzahlen sein, die durch einen Bindestrich getrennt sind (Leerzeichen werden ignoriert). Ganzzahlen können von 1
reichen auf maximal 6
, abhängig von der Sortierung, und müssen in aufsteigender Reihenfolge aufgelistet werden.
- Wenn der
LEVEL
-Klausel nicht angegeben ist, ein Standardwert von1
bis zum Maximum für die Sortierung angenommen. - Wenn der
LEVEL
ohne Verwendung eines Bereichs angegeben wird, ist ein optionaler Modifikator erlaubt. ASC
(der Standardwert) gibt die Gewichtungen ohne Änderungen zurück.DESC
gibt bitweise invertierte Gewichtungen zurück.REVERSE
gibt die Gewichtungen in umgekehrter Reihenfolge zurück.
Beispiel
Hier ist ein einfaches Beispiel:
SELECT HEX(WEIGHT_STRING('z'));
Ergebnis:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Hier verwenden wir das HEX()
Funktion zur Darstellung nicht druckbarer Ergebnisse im Hexadezimalformat.
Der AS
Klausel
Hier ist ein Beispiel mit AS
-Klausel, um die Eingabezeichenfolge in einen bestimmten Typ und eine bestimmte Länge umzuwandeln.
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';
Ergebnis (bei vertikaler Ausgabe):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Sammlung
Die folgenden zwei Beispiele zeigen, wie eine Zeichenfolge je nach verwendeter Sortierung eine andere Gewichtungszeichenfolge haben kann.
Bei der im ersten Beispiel verwendeten Sortierung wird die Groß-/Kleinschreibung nicht beachtet. Bei der im zweiten Beispiel verwendeten Sortierung wird zwischen Groß- und Kleinschreibung unterschieden.
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));
Ergebnis:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
Und hier ist dasselbe Beispiel, außer mit einer Sortierung, bei der die Groß-/Kleinschreibung beachtet wird.
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));
Ergebnis:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Null-Argumente
Übergabe von null
gibt null
zurück :
SELECT WEIGHT_STRING(null);
Ergebnis:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Fehlende Argumente
Aufruf von WEIGHT_STRING()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT WEIGHT_STRING();
Ergebnis:
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