In MySQL, il WEIGHT_STRING()
la funzione 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 i pesi di confronto per la 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. Nota che il suo comportamento può cambiare tra le versioni di MySQL.
Sintassi
La sintassi è questa:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])
Dove str
è la stringa di input. Il AS
opzionale La clausola consente di eseguire il cast della stringa di input su un determinato tipo e lunghezza. I flags
opzionali argomento non è attualmente utilizzato in MySQL (a partire dalla versione 8.0).
Esempio 1 – Utilizzo di base
Ecco un esempio di base di utilizzo utilizzando una stringa di input non binaria:
SELECT HEX(WEIGHT_STRING('Cat'));
Risultato:
+---------------------------+ | HEX(WEIGHT_STRING('Cat')) | +---------------------------+ | 1C7A1C471E95 | +---------------------------+
Nota che uso HEX()
funzione per visualizzare il WEIGHT_STRING()
risultato. Questo perché WEIGHT_STRING()
restituisce un risultato binario. Possiamo usare HEX()
per visualizzare il risultato in un modulo stampabile.
Se non utilizzo HEX()
in questo esempio ottengo questo:
SELECT WEIGHT_STRING('Cat');
Risultato:
+----------------------+ | WEIGHT_STRING('Cat') | +----------------------+ | zG? | +----------------------+
Quindi, solo per essere chiari, ecco la stringa, la rappresentazione esadecimale di quella stringa e la rappresentazione esadecimale della sua stringa di peso:
SET @str = 'Cat'; SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));
Risultato:
+------+-----------+--------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) | +------+-----------+--------------------------+ | Cat | 436174 | 1C7A1C471E95 | +------+-----------+--------------------------+
Esempio 2 – La clausola AS
Ecco un esempio usando AS
clausola per eseguire il cast della stringa di input su un determinato tipo e lunghezza.
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';
Risultato:
+--------------+--------------+----------+------------------+ | Char 3 | Char 8 | Binary 3 | Binary 8 | +--------------+--------------+----------+------------------+ | 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 | +--------------+--------------+----------+------------------+
Esempio 3 – 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 accenti e maiuscole e minuscole. Le regole di confronto utilizzate nel secondo esempio fanno distinzione tra accenti e maiuscole.
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));
Risultato:
+--------+--------+---------------+ | String | Hex | Weight String | +--------+--------+---------------+ | CAT | 434154 | 1C7A1C471E95 | | cat | 636174 | 1C7A1C471E95 | +--------+--------+---------------+
Ed ecco lo stesso esempio, tranne che con regole di confronto con distinzione tra accenti e maiuscole.
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));
Risultato:
+--------+--------+----------------------------------------------+ | String | Hex | Weight String | +--------+--------+----------------------------------------------+ | CAT | 434154 | 1C7A1C471E9500000020002000200000000800080008 | | cat | 636174 | 1C7A1C471E9500000020002000200000000200020002 | +--------+--------+----------------------------------------------+