La intercalación predeterminada de MySQL es latin1_swedish_ci
antes de 8.0
y utf8mb4_0900_ai_ci
desde 8.0
. Por lo tanto, las comparaciones de cadenas no binarias no distinguen entre mayúsculas y minúsculas de forma predeterminada en las columnas ordinarias.
Sin embargo, como se menciona en Manual de MySQL para tipo JSON
Por lo tanto, su valor JSON está en utf8mb4_bin
intercalación y debe aplicar una intercalación que no distinga entre mayúsculas y minúsculas a cualquiera de los operandos para que la comparación no distinga entre mayúsculas y minúsculas.
Por ejemplo
WHERE username COLLATE XXX LIKE '...'
donde XXX
debe ser una intercalación utf8mb4 (como utf8mb4_general_ci
has mencionado).
O
WHERE username LIKE '...' COLLATE YYY
donde YYY
debe ser una intercalación que coincida con el conjunto de caracteres de su conexión.
Para comparar la igualdad, debe quitar las comillas del valor JSON
con JSON_UNQUOTE()
o el operador de extracción sin comillas ->>
Por ejemplo
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
O simplemente
payload->>'$.username'
El tipo y las funciones de JSON funcionan de manera diferente a los tipos de datos ordinarios. Parece que eres nuevo en esto. Por lo tanto, le sugiero que lea el manual detenidamente antes de ponerlo en un entorno de producción.