MySQL
Tekensets en verzamelingen
Zoeken…
Verklaring
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Verbinding
Essentieel voor het gebruik van tekensets is om de MySQL-server te vertellen wat de bytes van de client zijn. Hier is een manier:
SET NAMES utf8mb4;
Elke taal (PHP, Python, Java, ...) heeft zijn eigen manier die meestal de voorkeur verdient boven SET NAMES
.
Bijvoorbeeld: SET NAMES utf8mb4
, samen met een kolom die CHARACTER SET latin1
- deze converteert van latin1 naar utf8mb4 bij het INSERTing
en converteert terug bij het SELECTing
.
Welk KARAKTERSET en COLLATIE?
Er zijn tientallen tekensets met honderden verzamelingen. (Een gegeven sortering hoort bij slechts één tekenset.) Zie de uitvoer van SHOW COLLATION;
.
Er zijn meestal slechts 4 CHARACTER SETs
doen:
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.
Alle tekens bevatten Engelse tekens, identiek gecodeerd. utf8 is een subset van utf8mb4.
Beste oefening...
- Gebruik utf8mb4 voor eventuele
TEXT
ofVARCHAR
kolom die een verscheidenheid aan talen in kan hebben. - Gebruik ascii (latin1 is ok) voor hex strings (UUID, MD5, enz.) En eenvoudige codes (landcode, postcode, enz.).
utf8mb4 bestond niet tot versie 5.5.3, dus utf8 was daarvoor de best beschikbare.
Buiten MySQL betekent "UTF8" dezelfde dingen als utf8mb4 van MySQL, niet utf8 van MySQL.
Collaties beginnen met de naam van het _ci
en eindigen meestal met _ci
voor "hoofdlettergevoelig en accent ongevoelig" of _bin
voor "eenvoudigweg de bits vergelijken.
De 'nieuwste' utf8mb4-sortering is utf8mb4_unicode_520_ci
, gebaseerd op Unicode 5.20. Als u met één taal werkt, wilt u bijvoorbeeld utf8mb4_polish_ci
, die de letters enigszins zal herschikken, op basis van Poolse conventies.
Tekensets instellen op tabellen en velden
U kunt een tekenset zowel per tabel als per afzonderlijk veld instellen met behulp van de CHARACTER SET
en CHARSET
instructies:
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
en Country
gebruiken UTF8
, omdat we dat instellen als de standaardtekenset voor de tabel. Street
daarentegen zal ASCII
, zoals we specifiek hebben gezegd om dit te doen.
Het instellen van de juiste tekenset is sterk afhankelijk van uw gegevensset, maar kan ook de draagbaarheid tussen systemen die met uw gegevens werken, aanzienlijk verbeteren.