In MariaDB, WEIGHT_STRING()
è una funzione incorporata che restituisce la stringa di peso per la stringa di input. Il valore restituito è una stringa binaria che rappresenta il valore di confronto e ordinamento della stringa.
Se la stringa di input è un valore non binario, il valore restituito contiene il peso delle regole di confronto della stringa. Se è un valore binario, il risultato è lo stesso della stringa di input. Questo perché il peso per ogni byte in una stringa binaria è il valore del byte.
Questa funzione è una funzione di debug destinata all'uso interno. Può essere utilizzato per il test e il debug delle regole di confronto.
Sintassi
La sintassi è questa:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Di seguito è riportata una descrizione di ogni argomento/clausola.
Il AS
Clausola
Il AS
opzionale La clausola consente di eseguire il cast della stringa di input su una stringa binaria o non binaria, nonché su una lunghezza particolare.
AS BINARY(N)
misura la lunghezza in byte anziché in caratteri e i tasti di destra con 0x00 byte alla lunghezza desiderata.AS CHAR(N)
misura la lunghezza in caratteri e pad destro con spazi alla lunghezza desiderata.
N
ha un valore minimo di 1
e se è inferiore alla lunghezza della stringa di input, la stringa viene troncata senza preavviso.
Il LEVEL
Clausola
Specifica che il valore restituito deve contenere pesi per livelli di confronto specifici.
I levels
lo specificatore può essere un singolo numero intero, un elenco di numeri interi separati da virgole o un intervallo di numeri interi separati da un trattino (gli spazi vuoti vengono ignorati). I numeri interi possono variare da 1
fino a un massimo di 6
, a seconda delle regole di confronto e devono essere elencate in ordine crescente.
- Se il
LEVEL
non viene fornita la clausola, un valore predefinito di1
al massimo per la raccolta. - Se il
LEVEL
è specificato senza utilizzare un intervallo, è consentito un modificatore facoltativo. ASC
(di default) restituisce i pesi senza alcuna modifica.DESC
restituisce pesi invertiti bit per bit.REVERSE
restituisce i pesi in ordine inverso.
Esempio
Ecco un esempio di base:
SELECT HEX(WEIGHT_STRING('z'));
Risultato:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Qui utilizziamo HEX()
funzione per rappresentare i risultati non stampabili in formato esadecimale.
Il AS
Clausola
Ecco un esempio usando AS
clausola per eseguire il cast della stringa di input su un determinato tipo e lunghezza.
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';
Risultato (usando l'output verticale):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Fascicolazione
I due esempi seguenti mostrano come una stringa può avere una stringa di peso diversa, a seconda delle regole di confronto utilizzate.
Le regole di confronto utilizzate nel primo esempio non fanno distinzione tra maiuscole e minuscole. Le regole di confronto utilizzate nel secondo esempio fanno distinzione tra maiuscole e minuscole.
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));
Risultato:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
Ed ecco lo stesso esempio, tranne che per le regole di confronto con distinzione tra maiuscole e minuscole.
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));
Risultato:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Argomenti nulli
Passaggio null
restituisce null
:
SELECT WEIGHT_STRING(null);
Risultato:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Argomenti mancanti
Chiamando WEIGHT_STRING()
con il numero errato di argomenti o senza passare alcun argomento genera un errore:
SELECT WEIGHT_STRING();
Risultato:
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