Di MariaDB, WEIGHT_STRING()
adalah fungsi bawaan yang mengembalikan string bobot untuk string input. Nilai yang dikembalikan adalah string biner yang mewakili nilai perbandingan dan pengurutan string.
Jika string input adalah nilai nonbiner, nilai kembalian berisi bobot susunan 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 susunan.
Sintaks
Sintaksnya seperti ini:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Di bawah ini adalah deskripsi dari setiap argumen/klausa.
AS
Klausa
AS
opsional klausa mengizinkan casting string input ke string biner atau non-biner, serta ke panjang tertentu.
AS BINARY(N)
mengukur panjang dalam byte daripada karakter, dan pad kanan dengan 0x00 byte ke panjang yang diinginkan.AS CHAR(N)
mengukur panjang dalam karakter, dan pad kanan dengan spasi sesuai panjang yang diinginkan.
N
memiliki nilai minimum 1
, dan jika panjangnya kurang dari string input, string akan terpotong tanpa peringatan.
LEVEL
Klausa
Menentukan bahwa nilai kembalian harus berisi bobot untuk tingkat susunan tertentu.
levels
specifier dapat berupa bilangan bulat tunggal, daftar bilangan bulat yang dipisahkan koma, atau rentang bilangan bulat yang dipisahkan oleh tanda hubung (spasi diabaikan). Bilangan bulat dapat berkisar dari 1
maksimal 6
, bergantung pada susunan, dan perlu dicantumkan dalam urutan menaik.
- Jika
LEVEL
klausa tidak disediakan, default1
maksimum untuk pemeriksaan diasumsikan. - Jika
LEVEL
ditentukan tanpa menggunakan rentang, pengubah opsional diizinkan. ASC
(default) mengembalikan bobot tanpa modifikasi apa pun.DESC
mengembalikan bobot bitwise-inverted.REVERSE
mengembalikan bobot dalam urutan terbalik.
Contoh
Berikut ini contoh dasarnya:
SELECT HEX(WEIGHT_STRING('z'));
Hasil:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Di sini, kami menggunakan HEX()
berfungsi untuk mewakili hasil yang tidak dapat dicetak dalam format heksadesimal.
AS
Klausa
Berikut ini contoh menggunakan AS
klausa untuk mentransmisikan string input ke jenis dan panjang tertentu.
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';
Hasil (menggunakan keluaran vertikal):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Kolasi
Dua contoh berikut menunjukkan bagaimana string dapat memiliki bobot string yang berbeda, tergantung pada susunan yang digunakan.
Susunan yang digunakan dalam contoh pertama tidak peka huruf besar-kecil. Susunan yang digunakan dalam contoh kedua peka huruf besar/kecil.
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));
Hasil:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
Dan inilah contoh yang sama, kecuali dengan susunan yang peka huruf besar/kecil.
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));
Hasil:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Argumen Null
Melewati null
mengembalikan null
:
SELECT WEIGHT_STRING(null);
Hasil:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Argumen Tidak Ada
Memanggil WEIGHT_STRING()
dengan jumlah argumen yang salah, atau tanpa memberikan argumen apa pun menghasilkan kesalahan:
SELECT WEIGHT_STRING();
Hasil:
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