È possibile specificare il set di caratteri e le regole di confronto a vari livelli in MariaDB. È possibile specificarli a livello di connessione, a livello di server, a livello di database, a livello di tabella e persino a livello di colonna.
Puoi anche specificare un confronto nelle tue query in modo che sostituisca qualsiasi confronto che è stato precedentemente specificato ai livelli sopra indicati.
Per impostare il set di caratteri e le regole di confronto a livello di colonna, usa CREATE TABLE
istruzione o ALTER TABLE
istruzione (a seconda che tu stia creando la tabella o modificandola).
Durante la creazione della tabella
Ecco un esempio di impostazione delle regole di confronto e del set di caratteri su una colonna durante la creazione della tabella:
CREATE TABLE Events (
EventId INT AUTO_INCREMENT NOT NULL,
EventName VARCHAR(255)
CHARACTER SET utf8
COLLATE utf8_spanish_ci,
PRIMARY KEY (EventId)
);
Qui, ho specificato il set di caratteri e le regole di confronto a livello di colonna. È anche possibile impostarli a livello di tabella.
Modificare una colonna esistente
Ecco un esempio di modifica delle regole di confronto e del set di caratteri su una colonna esistente:
ALTER TABLE Events
MODIFY EventName VARCHAR(255)
CHARACTER SET latin5 COLLATE latin5_turkish_ci;
Il EventName
la colonna ora usa le nuove regole di confronto e set di caratteri.
Controlla la colonna
Esistono diversi modi per controllare le regole di confronto e il set di caratteri di una colonna. Eccone uno:
SELECT
column_name,
character_set_name,
collation_name
FROM information_schema.columns
WHERE table_name = 'Events'
AND column_name = 'EventName';
Risultato:
+-------------+--------------------+-------------------+ | column_name | character_set_name | collation_name | +-------------+--------------------+-------------------+ | EventName | latin5 | latin5_turkish_ci | +-------------+--------------------+-------------------+
Le regole di confronto devono essere valide per il set di caratteri
Quando si impostano sia la fascicolazione che il set di caratteri, è necessario assicurarsi che la fascicolazione sia valida per il set di caratteri scelto e viceversa. In caso contrario, viene restituito un errore.
Ecco un esempio di specificazione dell'utilizzo di regole di confronto non valide per il set di caratteri specificato:
ALTER TABLE Events
MODIFY EventName VARCHAR(255)
CHARACTER SET utf16 COLLATE latin5_turkish_ci;
Risultato:
ERROR 1253 (42000): COLLATION 'latin5_turkish_ci' is not valid for CHARACTER SET 'utf16'
Ci dice che le regole di confronto scelte non sono valide per il set di caratteri specificato scelto.
Consulta l'elenco completo delle regole di confronto supportate da MariaDB o l'elenco completo dei set di caratteri supportati da MariaDB per un elenco di regole di confronto e set di caratteri corrispondenti.
Specificare solo la fascicolazione o il set di caratteri
È possibile specificare solo le regole di confronto o solo il set di caratteri (o nessuno dei due):
- Se viene fornito solo il set di caratteri, verranno utilizzate le regole di confronto predefinite per quel set di caratteri.
- Se viene fornita solo la fascicolazione, verrà utilizzato il set di caratteri associato.
- Se non vengono fornite né le regole di confronto né il set di caratteri, viene utilizzata l'impostazione predefinita della tabella.
Conversione in un set di caratteri che richiede più byte
È anche possibile convertire il set di caratteri a livello di tavolo. Quando si converte il set di caratteri a livello di tabella, c'è la possibilità che MariaDB possa convertire automaticamente il tipo di dati in uno più in grado di gestire il nuovo set di caratteri.
Tuttavia, quando utilizziamo MODIFY
sulle singole colonne e specificando esplicitamente il tipo di dati (come abbiamo fatto negli esempi precedenti), impediamo a MariaDB di convertire il tipo di dati.
Conversione in binario
CONVERT TO CHARACTER SET binary
convertirà CHAR
, VARCHAR
e TEXT
colonne in BINARY
, VARBINARY
e BLOB
rispettivamente.
Una volta fatto ciò, tali colonne non avranno più un set di caratteri. Inoltre, non saranno più interessati da CONVERT TO CHARACTER SET
dichiarazioni.
Verifica delle regole di confronto e dei set di caratteri in MariaDB
Esistono vari modi per controllare le regole di confronto e i set di caratteri in MariaDB, a seconda del livello che stai controllando (server, database, tabella, colonna, connessione, ecc.). Vedi Mostra le regole di confronto in MariaDB per esempi.