sql >> Databáze >  >> RDS >> Mysql

INSTR(str,substr) nefunguje, když str obsahuje 'é' nebo 'ë' a substr pouze 'e'

Důvodem je chyba 70767 na LOCATE() a INSTR() , který byl ověřen.

Ačkoli INSTR() dokumentace uvádí, že jej lze použít pro vícebajtové řetězce, zdá se, že nefunguje, jak si všimnete, s porovnáváním jako utf8_general_ci , který neměl by rozlišovat malá a velká písmena

Zpráva o chybě uvádí, že ačkoli to MySQL dělá správně, dělá to pouze tehdy, když počet bajtů je také identický:

Chcete-li zvrátit příklad sestav, pokud vytvoříte následující tabulku:

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

poté spusťte tento dotaz, uvidíte demonstrované stejné chování:

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

SQL Fiddle




  1. sql levé spojení, kde kombinujete instance pole na pravé straně do jednoho výsledku ve sloupci csv

  2. Oracle, jak importovat chybějící třídy Java při volání jazyka Java z plsql

  3. PostgreSQL date() s časovým pásmem

  4. Vysvětlete prosím funkčnost select max(...) ... group by in sql