Susunan default MySQL adalah latin1_swedish_ci
sebelum 8.0
dan utf8mb4_0900_ai_ci
sejak 8.0
. Jadi perbandingan string non-biner tidak peka huruf besar/kecil secara default di kolom biasa.
Namun, seperti yang disebutkan dalam manual MySQL untuk tipe JSON
Oleh karena itu, nilai JSON Anda ada di utf8mb4_bin
collation dan Anda perlu menerapkan collation case-insensitive ke salah satu operan untuk membuat perbandingan case-sensitive.
Mis.
WHERE username COLLATE XXX LIKE '...'
di mana XXX
harus berupa susunan utf8mb4 (seperti utf8mb4_general_ci
Anda sebutkan.).
Atau
WHERE username LIKE '...' COLLATE YYY
dimana YYY
harus berupa susunan yang cocok dengan rangkaian karakter koneksi Anda.
Untuk perbandingan kesetaraan, Anda harus tanda kutip nilai JSON
dengan JSON_UNQUOTE()
atau operator ekstraksi tanda kutip ->>
Mis.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Atau cukup
payload->>'$.username'
Jenis dan fungsi JSON bekerja dengan cara yang berbeda dari tipe data biasa. Tampaknya Anda baru mengenalnya. Jadi saya menyarankan Anda untuk membaca manual dengan seksama sebelum memasukkannya ke dalam lingkungan produksi.