sql >> Database >  >> RDS >> Mysql

Gebruik accentgevoelige primaire sleutel in MySQL

Collaties . Je hebt twee keuzes, niet drie:

utf8_bin behandelt deze allemaal als verschillend :demandé en demande en Demandé .

utf8_..._ci (meestal utf8_general_ci of utf8_unicode_ci ) behandelt deze allemaal als hetzelfde :demandé en demande en Demandé .

Als u alleen hoofdlettergevoeligheid wilt (demandé =demande , maar geen van beide komt overeen met Demandé ), heb je pech.

Als je alleen accentgevoeligheid wilt (demandé =Demandé , maar geen van beide komt overeen met demande ), heb je pech.

Verklaring . De beste manier om te doen wat je kiest:

CREATE TABLE (
    name VARCHAR(...)  CHARACTER SET utf8  COLLATE utf8_...  NOT NULL,
    ...
    PRIMARY KEY(name)
)

Verander de sortering niet meteen . Dit zal de index niet gebruiken (dat wil zeggen, zal traag zijn) als de sortering anders is in name :

WHERE name = ... COLLATE ...

BINAIR . De datatypes BINARY , VARBINARY en BLOB lijken erg op CHAR , VARCHAR , en TEXT met COLLATE ..._bin . Misschien is het enige verschil dat tekst wordt gecontroleerd op geldige utf8-opslag in een VARCHAR ... COLLATE ..._bin , maar het wordt niet gecontroleerd bij het opslaan in VARBINARY... . Vergelijkingen (WHERE , ORDER BY , enz.) zullen hetzelfde zijn; dat wil zeggen, vergelijk gewoon de bits, doe geen case-folding of accentstripping, enz.



  1. Tool voor vertaling van Oracle PL/SQL naar Postgresql PL/pgSQL

  2. MySQL SOUNDEX() Voorbeelden

  3. cursor:pin S wacht op X

  4. PHP-fout:aanroep van een lidfunctie rowCount() op een niet-object