sql >> Databasteknik >  >> RDS >> Mysql

INSTR(str,substr) fungerar inte när str innehåller 'é' eller 'ë' och substr endast 'e'

Detta beror på bugg 70767 på LOCATE() och INSTR() , som har verifierats.

Även om INSTR() dokumentationen säger att det kan användas för flerbytesträngar, det verkar inte fungera, som du noterar, med sammanställningar som utf8_general_ci , som ska vara okänslig för skiftläge och accent

Felrapporten säger att även om MySQL gör detta korrekt gör det det bara när antalet byte är också identisk:

För att förvränga rapportexemplet, om du skapar följande tabell:

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 sedan den här frågan, du kan se samma beteende visas:

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

SQL Fiddle




  1. SQL oracle nybörjarfrågor

  2. ORA-00904:ogiltig identifierare

  3. 2 räkna(*)+gruppera efter att+ha+gå med

  4. MySQL LIKE IN()?