Đối chiếu mặc định của MySQL là latin1_swedish_ci
trước 8.0
và utf8mb4_0900_ai_ci
kể từ 8.0
. Vì vậy, so sánh chuỗi không phải nhị phân theo mặc định là không phân biệt chữ hoa chữ thường trong các cột thông thường.
Tuy nhiên, như đã đề cập trong Hướng dẫn sử dụng MySQL cho loại JSON
Do đó, giá trị JSON của bạn ở utf8mb4_bin
đối chiếu và bạn cần áp dụng đối chiếu không phân biệt chữ hoa chữ thường cho một trong hai toán hạng để làm cho so sánh không phân biệt chữ hoa chữ thường.
Ví dụ:
WHERE username COLLATE XXX LIKE '...'
ở đâu XXX
phải là đối chiếu utf8mb4 (chẳng hạn như utf8mb4_general_ci
bạn đã đề cập.).
Hoặc
WHERE username LIKE '...' COLLATE YYY
ở đâu YYY
phải là một đối chiếu phù hợp với bộ ký tự mà bạn kết nối.
Để so sánh bình đẳng, bạn nên hủy trích dẫn giá trị JSON
với JSON_UNQUOTE()
hoặc toán tử giải nén giải nén ->>
Ví dụ:
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Hoặc đơn giản là
payload->>'$.username'
Kiểu và các hàm JSON hoạt động theo cách khác với các kiểu dữ liệu thông thường. Có vẻ như bạn chưa quen với nó. Vì vậy, tôi khuyên bạn nên đọc kỹ hướng dẫn sử dụng trước khi đưa nó vào môi trường sản xuất.