MySQL
Teckenuppsättningar och -samlingar
Sök…
Deklaration
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Förbindelse
Viktig för att använda teckenuppsättningar är att berätta för MySQL-servern vad som kodar klientens byte. Här är ett sätt:
SET NAMES utf8mb4;
Varje språk (PHP, Python, Java, ...) har sitt eget sätt som det vanligtvis föredrar framför SET NAMES
.
Exempel: SET NAMES utf8mb4
, tillsammans med en kolumn som deklareras CHARACTER SET latin1
- detta konverteras från latin1 till utf8mb4 när INSERTing
och konvertera tillbaka när SELECTing
.
Vilken karaktärsuppsättning och samling?
Det finns dussintals teckenuppsättningar med hundratals samlingar. (En given samling tillhör endast en teckenuppsättning.) Se utgången från SHOW COLLATION;
.
Det finns vanligtvis bara CHARACTER SETs
som betyder något:
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
Alla inkluderar engelska tecken, kodade identiskt. utf8 är en delmängd av utf8mb4.
Bästa praxis ...
- Använd utf8mb4 för alla
TEXT
ellerVARCHAR
kolumner som kan ha olika språk i den. - Använd ascii (latin1 är ok) för hexsträngar (UUID, MD5, etc) och enkla koder (landskod, postnummer, etc).
utf8mb4 fanns inte förrän version 5.5.3, så utf8 var det bästa tillgängliga innan det.
Utanför MySQL betyder "UTF8" samma saker som MySQL: s utf8mb4, inte MySQL: s utf8.
Samlingar börjar med namnet på charset och slutar vanligtvis med _ci
för "case and accent insensitive" eller _bin
for "jämför bara bitarna.
Den 'senaste' utf8mb4-samlingen är utf8mb4_unicode_520_ci
, baserad på Unicode 5.20. Om du arbetar med ett enda språk kanske du vill säga utf8mb4_polish_ci
, vilket kommer att ordna om bokstäverna något, baserat på polska konventioner.
Ställer in teckenuppsättningar på tabeller och fält
Du kan ställa in en teckenuppsättning både per tabell och per enskilt fält med CHARACTER SET
och CHARSET
:
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
och Country
kommer att använda UTF8
, eftersom vi ställer in det som standardteckenuppsättning för tabellen. Street
å andra sidan kommer att använda ASCII
, eftersom vi specifikt har sagt det att göra det.
Att ställa in rätt teckenuppsättning är mycket beroende av ditt datasæt, men kan också förbättra portabiliteten mellan system som arbetar med dina data.