sql >> Databasteknik >  >> RDS >> MariaDB

Ställ in teckenuppsättningen och sorteringen av en tabell i MariaDB

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.


  1. PostgreSQL:Inaktivera anslutningar tillfälligt

  2. Komplett användarregistreringssystem med PHP och MySQL-databas

  3. Slå samman två partitioner till en i SQL Server (T-SQL)

  4. SpringBoot+Kotlin+Postgres och JSONB:org.hibernate.MappingException:Ingen dialektmappning för JDBC-typ