O agrupamento padrão do MySQL é
latin1_swedish_ci
antes de 8.0
e utf8mb4_0900_ai_ci
desde 8.0
. Portanto, as comparações de strings não binárias não diferenciam maiúsculas de minúsculas por padrão em colunas comuns. No entanto, conforme mencionado no Manual do MySQL para o tipo JSON
Portanto, seu valor JSON está em
utf8mb4_bin
ordenação e você precisa aplicar uma ordenação que não diferencia maiúsculas de minúsculas a qualquer operando para tornar a comparação insensível a maiúsculas e minúsculas. Por exemplo.
WHERE username COLLATE XXX LIKE '...'
onde
XXX
deve ser um agrupamento utf8mb4 (como o utf8mb4_general_ci
você mencionou.). Ou
WHERE username LIKE '...' COLLATE YYY
onde
YYY
deve ser um agrupamento que corresponda ao conjunto de caracteres de sua conexão. Para comparação de igualdade, você deve retire o valor JSON com
JSON_UNQUOTE()
ou o operador de extração sem aspas ->>
Por exemplo.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Ou simplesmente
payload->>'$.username'
O tipo e as funções JSON funcionam de maneira diferente dos tipos de dados comuns. Parece que você é novo nisso. Portanto, sugiro que você leia o manual cuidadosamente antes de colocá-lo em um ambiente de produção.