sql >> Databasteknik >  >> RDS >> Mysql

Använd accentkänslig primärnyckel i MySQL

Samställningar . Du har två val, inte tre:

utf8_bin behandlar alla dessa som olika :demandé och demande och Demandé .

utf8_..._ci (vanligtvis utf8_general_ci eller utf8_unicode_ci ) behandlar alla dessa som samma :demandé och demande och Demandé .

Om du bara vill ha skiftlägeskänslighet (demandé =demande , men ingendera matchar Demandé ), har du ingen tur.

Om du bara vill ha accentkänslighet (demandé =Demandé , men ingendera matchar demande ), har du ingen tur.

Deklaration . Det bästa sättet att göra vad du än väljer:

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

Ändra inte sortering i farten . Detta kommer inte att använda indexet (det vill säga kommer att vara långsamt) om sorteringen är annorlunda i name :

WHERE name = ... COLLATE ...

BINÄR . datatyperna BINARY , VARBINARY och BLOB är väldigt lika CHAR , VARCHAR och TEXT med COLLATE ..._bin . Den enda skillnaden är kanske att text kommer att kontrolleras för giltig utf8-lagring i en VARCHAR ... COLLATE ..._bin , men det kommer inte att kontrolleras vid lagring i VARBINARY... . Jämförelser (WHERE , ORDER BY , etc) kommer att vara samma; det vill säga, jämför helt enkelt bitarna, gör inte fodralvikning eller accentstrippning, etc.



  1. Använda JDeveloper med MySQL Database och Oracle Database på AWS RDS, del 1

  2. MySQL Error 2006 (HY000) på rad 406:MySQL-servern har försvunnit

  3. Hur man uppgraderar postgresql-databas från 10 till 12 utan att förlora data för openproject

  4. Hur skulle jag implementera en enkel webbplatssökning med php och mySQL?