sql >> Database teknologi >  >> RDS >> Mysql

INSTR(str,substr) virker ikke, når str indeholder 'é' eller 'ë' og substr kun 'e'

Dette skyldes fejl 70767 på LOCATE() og INSTR() , som er blevet bekræftet.

Selvom INSTR() dokumentation angiver, at det kan bruges til multi-byte strenge, det ser ikke ud til at virke, som du bemærker, med sammenstillinger som utf8_general_ci , som bør være ufølsom over for store og små bogstaver og accent

Fejlrapporten siger, at selvom MySQL gør dette korrekt, gør det det kun, når antallet af bytes er også identisk:

For at pervertere rapporteksemplet, hvis du opretter følgende tabel:

create table t ( needle varchar(10), haystack varchar(10)
                  ) COLLATE=utf8_general_ci;
insert into t values ("A", "a"), ("A", "XaX");
insert into t values ("A", "á"), ("A", "XáX");
insert into t values ("Á", "a"), ("Á", "XaX");
insert into t values ("Å", "á"), ("Å", "XáX");

kør derefter denne forespørgsel, du kan se den samme adfærd demonstreret:

select needle
     , haystack
     , needle=haystack as `=`
     , haystack LIKE CONCAT('%',needle,'%') as `like`
     , instr(needle, haystack) as `instr`
  from t;

SQL Fiddle




  1. Del 2:Billedklassificering med MariaDB Server og TensorFlow – en vejledning

  2. Hvor mange borde kan jeg tilslutte mig sammen med MySQL?

  3. Power BI Service - Kan ikke opdatere en postgresql-kilde, som ikke understøtter krypterede forbindelser

  4. Hent den næstsidste post for hver bruger fra databasen