sql >> Database >  >> RDS >> Mysql

MySQL LIKE met json_extract

Standaardsortering van MySQL is latin1_swedish_ci voor 8.0 en utf8mb4_0900_ai_ci sinds 8.0 . Dus niet-binaire tekenreeksvergelijkingen zijn standaard hoofdletterongevoelig in gewone kolommen.

Echter, zoals vermeld in MySQL-handleiding voor JSON-type

Daarom bevindt uw JSON-waarde zich in utf8mb4_bin sortering en u moet een hoofdletterongevoelige sortering toepassen op beide operands om de vergelijking hoofdletterongevoelig te maken.

Bijv.

WHERE username COLLATE XXX LIKE '...'

waar XXX moet een utf8mb4-sortering zijn (zoals de utf8mb4_general_ci je hebt genoemd.).

Of

WHERE username LIKE '...' COLLATE YYY

waar YYY moet een sortering zijn die overeenkomt met de tekenset van uw verbinding.

Voor gelijkheidsvergelijking moet u de JSON-waarde ongedaan maken met JSON_UNQUOTE() of de extractie-operator zonder aanhalingstekens ->>

Bijv.

JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))

Of gewoon

payload->>'$.username'

Het JSON-type en de functies werken heel anders dan gewone gegevenstypen. Het lijkt erop dat je nieuw bent. Ik raad je dan ook aan om de handleiding aandachtig te lezen voordat je deze in een productieomgeving plaatst.



  1. selectbox met meerdere kolommen uit de mysql-database

  2. Bereken de som van de tijdkolom in PostgreSql

  3. Sessie wijzigen vertraagt ​​de query via Hibernate

  4. Uitvoeren van ExecuteScalar() wanneer er geen resultaten worden geretourneerd