Du kan specificera teckenuppsättningen och sorteringen på olika nivåer i MariaDB. Du kan ange dem på anslutningsnivå, servernivå, databasnivå, tabellnivå och till och med kolumnnivå.
Du kan också ange en sortering i dina frågor så att den åsidosätter all sortering som tidigare har angetts på ovannämnda nivåer.
För att ställa in teckenuppsättningen och sorteringen på tabellnivå, använd CREATE TABLE
uttalande eller ALTER TABLE
uttalande (beroende på om du skapar tabellen eller ändrar den).
När du skapar tabellen
Här är ett exempel på hur du ställer in sortering och teckenuppsättning när du skapar tabellen:
CREATE TABLE Products (
ProductId CHAR(10),
ProductName VARCHAR(255) NOT NULL,
PRIMARY KEY (ProductId))
CHARACTER SET latin1
COLLATE latin1_general_ci;
Det skapar en tabell som heter Products
med en latin1
teckenuppsättning och en sammanställning av latin1_general_ci
.
Ändra en befintlig tabell
Här är ett exempel på hur du ändrar sorteringen och teckenuppsättningen i en befintlig tabell:
ALTER TABLE Products
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Den använder nu den nya sorteringen och teckenuppsättningen.
Det är också möjligt att utelämna CONVERT TO
del:
ALTER TABLE Products
CHARACTER SET utf8
COLLATE utf8_spanish_ci;
Sorteringen måste vara giltig för teckenuppsättningen
När du ställer in både sorteringen och teckenuppsättningen måste du se till att sorteringen är giltig för den valda teckenuppsättningen och vice/versa. Om inte, returneras ett fel.
Här är ett exempel på hur du anger en ogiltig sortering för den angivna teckenuppsättningen:
ALTER TABLE Products
CHARACTER SET latin1
COLLATE utf8_spanish_ci;
Resultat:
ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'
Den talar om för oss att vår valda sortering inte är giltig för vår valda specificerade teckenuppsättning.
Se hela listan över sorteringar som stöds av MariaDB eller Fullständig lista över teckenuppsättningar som stöds av MariaDB för en lista över matchande sammanställningar och teckenuppsättningar.
Ange endast sortering eller teckenuppsättning
Det är OK att ange bara sorteringen eller bara teckenuppsättningen (eller ingetdera):
- Om endast teckenuppsättningen tillhandahålls kommer standardsorteringen för den teckenuppsättningen att användas.
- Om endast sorteringen tillhandahålls kommer den associerade teckenuppsättningen att användas.
- Om varken sortering eller teckenuppsättning tillhandahålls, används standardtabellen.
Konvertera till en teckenuppsättning som kräver fler byte
För VARCHAR
eller TEXT
kolumner, CONVERT TO CHARACTER SET
ändrar datatypen vid behov för att säkerställa att den nya kolumnen är tillräckligt lång för att lagra lika många tecken som den ursprungliga kolumnen.
Till exempel en ascii TEXT
kolumnen kräver en enda byte per tecken, så kolumnen kan innehålla upp till 65 535 tecken. Om kolumnen konverteras till utf8 kan upp till 3 byte krävas för varje tecken, så kolumnen kommer att konverteras till MEDIUMTEXT
(som har en maximal längd på 16 777 215) så att den kommer att kunna innehålla samma antal tecken.
Om du inte vill att sådana datatypsändringar ska ske, använd MODIFY
på de enskilda kolumnerna istället.
Till exempel:
ALTER TABLE Products
MODIFY ProductName VARCHAR(255)
CHARACTER SET utf8;
Konverterar till binärt
CONVERT TO CHARACTER SET binary
konverterar CHAR
, VARCHAR
och TEXT
kolumner till BINARY
, VARBINARY
och BLOB
respektive.
När detta har gjorts kommer sådana kolumner inte längre att ha en teckenuppsättning. Dessutom kommer de inte längre att påverkas av framtida CONVERT TO CHARACTER SET
uttalanden.
Kontrollera sortering och teckenuppsättningar i MariaDB
Det finns olika sätt att kontrollera sorteringen och teckenuppsättningarna i MariaDB, beroende på vilken nivå du kontrollerar (server, databas, tabell, kolumn, anslutning, etc). Se Visa sorteringen i MariaDB för exempel.