Standardsorteringen av MySQL är latin1_swedish_ci
före 8.0
och utf8mb4_0900_ai_ci
sedan 8.0
. Så icke-binära strängjämförelser är som standard skiftlägesokänsliga i vanliga kolumner.
Men som nämnts i MySQL-manual för JSON-typ
Därför är ditt JSON-värde i utf8mb4_bin
sortering och du måste använda en skiftlägesokänslig sortering på endera operanden för att göra jämförelsen skiftlägesokänslig.
T.ex.
WHERE username COLLATE XXX LIKE '...'
där XXX
ska vara en utf8mb4-kollation (som utf8mb4_general_ci
du har nämnt.).
Eller
WHERE username LIKE '...' COLLATE YYY
där YYY
bör vara en sammanställning som matchar teckenuppsättningen för din anslutning.
För jämställdhetsjämförelse bör du ta bort JSON-värdet
med JSON_UNQUOTE()
eller extraktionsoperatorn ->>
T.ex.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Eller helt enkelt
payload->>'$.username'
JSON-typen och funktionerna fungerar mycket annorlunda än vanliga datatyper. Det verkar som att du är ny på det. Så jag skulle föreslå att du läser manualen noggrant innan du sätter in den i en produktionsmiljö.