sql >> Base de Datos >  >> RDS >> Mysql

MySQL LIKE con json_extract

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.