sql >> Database teknologi >  >> RDS >> Mysql

Brug accentfølsom primær nøgle i MySQL

Samlinger . Du har to valgmuligheder, ikke tre:

utf8_bin behandler alle disse som forskellige :demandé og demande og Demandé .

utf8_..._ci (typisk utf8_general_ci eller utf8_unicode_ci ) behandler alle disse som det samme :demandé og demande og Demandé .

Hvis du kun ønsker følsomhed over for store og små bogstaver (demandé =demande , men ingen af ​​dem matcher Demandé ), er du ude af held.

Hvis du kun ønsker accentfølsomhed (demandé =Demandé , men ingen af ​​dem matcher demande ), er du ude af held.

Erklæring . Den bedste måde at gøre, hvad end du vælger:

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

Skift ikke sortering med det samme . Dette vil ikke bruge indekset (det vil være langsomt), hvis sorteringen er anderledes i name :

WHERE name = ... COLLATE ...

BINÆR . datatyperne BINARY , VARBINARY og BLOB minder meget om CHAR , VARCHAR og TEXT med COLLATE ..._bin . Måske er den eneste forskel, at tekst vil blive tjekket for gyldig utf8-lagring i en VARCHAR ... COLLATE ..._bin , men det vil ikke blive kontrolleret, når du gemmer i VARBINARY... . Sammenligninger (WHERE , ORDER BY , etc) vil være det samme; det vil sige, bare sammenlign bitsene, lad være med at folde sagen eller fjerne accent osv.



  1. kan jeg åbne en læse-alene-database fra res/aktiv-mappe i Android uden at kopiere til database-mappe

  2. Oprettelse af en SQL Server-tabel fra en C#-datatabel

  3. Eksporter en MySQL/MariaDB-database

  4. MySQL- Hvorfor virker LAST_INSERT_ID() ikke for mig?