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 eller VARCHAR 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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow