sql >> Database >  >> RDS >> Mysql

INSTR(str,substr) werkt niet als str 'é' of 'ë' bevat en substr alleen 'e'

Dit komt door bug 70767 op LOCATE() en INSTR() , die is geverifieerd.

Hoewel de INSTR() documentatie stelt dat het kan worden gebruikt voor strings van meerdere bytes, het lijkt niet te werken, zoals u opmerkt, met sorteringen zoals utf8_general_ci , die ongevoelig moet zijn voor hoofdletters en accenten

Het bugrapport stelt dat hoewel MySQL dit correct doet, dit alleen gebeurt wanneer het aantal bytes is ook identiek:

Om het rapportvoorbeeld te verdraaien, als u de volgende tabel maakt:

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");

voer vervolgens deze query uit, u kunt hetzelfde gedrag zien gedemonstreerd:

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

SQL Fiddle




  1. mysql splitst zoekstring op spatie en push in query

  2. Voor- en nadelen van een tabelnaam met spaties

  3. Een datum converteren in MySQL vanuit een stringveld

  4. PHP MySQL – Bewerkingen eenmaal per week