È 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 tabella, utilizzare 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 durante la creazione della tabella:
CREATE TABLE Products (
ProductId CHAR(10),
ProductName VARCHAR(255) NOT NULL,
PRIMARY KEY (ProductId))
CHARACTER SET latin1
COLLATE latin1_general_ci;
Questo crea una tabella chiamata Products
con un latin1
set di caratteri e una raccolta di latin1_general_ci
.
Modificare una tabella esistente
Ecco un esempio di modifica delle regole di confronto e del set di caratteri su una tabella esistente:
ALTER TABLE Products
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Ora usa le nuove regole di confronto e set di caratteri.
È anche possibile omettere il CONVERT TO
parte:
ALTER TABLE Products
CHARACTER SET utf8
COLLATE utf8_spanish_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 Products
CHARACTER SET latin1
COLLATE utf8_spanish_ci;
Risultato:
ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'
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
Per VARCHAR
o TEXT
colonne, CONVERT TO CHARACTER SET
cambia il tipo di dati, se necessario, per garantire che la nuova colonna sia sufficientemente lunga da memorizzare tanti caratteri quanti sono la colonna originale.
Ad esempio, un TEXT
ascii colonna richiede un singolo byte per carattere, quindi la colonna può contenere fino a 65.535 caratteri. Se la colonna viene convertita in utf8, possono essere richiesti fino a 3 byte per ogni carattere, quindi la colonna verrà convertita in MEDIUMTEXT
(che ha una lunghezza massima di 16.777.215) in modo che possa contenere lo stesso numero di caratteri.
Se non desideri che tali modifiche al tipo di dati avvengano, utilizza MODIFY
invece sulle singole colonne.
Ad esempio:
ALTER TABLE Products
MODIFY ProductName VARCHAR(255)
CHARACTER SET utf8;
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.
Controllo 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.