Di MySQL, WEIGHT_STRING()
fungsi mengembalikan string bobot untuk string input. Nilai yang dikembalikan adalah string biner yang mewakili nilai perbandingan dan pengurutan string.
Jika string input adalah nilai non-biner, nilai kembalian berisi bobot susunan untuk string. Jika itu nilai biner, hasilnya sama dengan string input. Ini karena bobot untuk setiap byte dalam string biner adalah nilai byte.
Fungsi ini adalah fungsi debugging yang ditujukan untuk penggunaan internal. Ini dapat digunakan untuk menguji dan men-debug collation. Perhatikan bahwa perilakunya dapat berubah di antara versi MySQL.
Sintaks
Sintaksnya seperti ini:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])
Dimana str
adalah string masukan. AS
opsional klausa memungkinkan Anda untuk melemparkan string input ke jenis dan panjang tertentu. flags
opsional argumen saat ini tidak digunakan di MySQL (pada versi 8.0).
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh dasar penggunaan menggunakan string input nonbiner:
SELECT HEX(WEIGHT_STRING('Cat'));
Hasil:
+---------------------------+| HEX(WEIGHT_STRING('Kucing')) |+---------------------------+| 1C7A1C471E95 |+---------------------------+
Perhatikan bahwa saya menggunakan HEX()
fungsi untuk menampilkan WEIGHT_STRING()
hasil. Ini karena WEIGHT_STRING()
mengembalikan hasil biner. Kita dapat menggunakan HEX()
untuk menampilkan hasilnya dalam bentuk yang dapat dicetak.
Jika saya tidak menggunakan HEX()
dalam contoh ini saya mendapatkan ini:
SELECT WEIGHT_STRING('Kucing');
Hasil:
+----------------------+| WEIGHT_STRING('Kucing') |+----------------------+| zG? |+----------------------+
Untuk memperjelas, inilah string, representasi heksadesimal dari string itu, dan representasi heksadesimal dari string bobotnya:
SET @str ='Kucing';SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));
Hasil:
+------+-----------+---------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |+------+-----------+--------------------- -----+| Kucing | 436174 | 1C7A1C471E95 |+------+-----------+--------------------------+Contoh 2 – Klausa AS
Berikut ini contoh menggunakan
AS
klausa untuk mentransmisikan string input ke jenis dan panjang tertentu.SET @str ='Kucing';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';Hasil:
+-------------+--------------+----------+----- -------------+| Char 3 | Char 8 | Biner 3 | Biner 8 |+-------------+--------------+----------+----- -------------+| 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 |+--------------+--------------+----------+------ ------------+Contoh 3 – Pengumpulan
Dua contoh berikut menunjukkan bagaimana string dapat memiliki bobot string yang berbeda, tergantung pada susunan yang digunakan. Susunan yang digunakan dalam contoh pertama adalah tidak peka terhadap aksen dan tidak peka huruf besar/kecil. Susunan yang digunakan dalam contoh kedua peka terhadap aksen dan peka huruf besar/kecil.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_ci;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Berat String'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));Hasil:
+--------+--------+---------------+| String | Heksa | String Berat |+--------+--------+---------------+| kucing | 434154 | 1C7A1C471E95 || kucing | 636174 | 1C7A1C471E95 |+--------+--------+---------------+Dan inilah contoh yang sama, kecuali dengan susunan yang peka terhadap aksen dan peka huruf besar/kecil.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_as_cs;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Berat String'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));Hasil:
+--------+--------+---------------------------- ------------------+| String | Heksa | String Berat |+--------+--------+---------------------------- ------------------+| kucing | 434154 | 1C7A1C471E9500000020002000200000000800080008 || kucing | 636174 | 1C7A1C471E9500000020002000200000000200020002 |+--------+----+----------------------------- -----------------+