MariaDB
 sql >> Database >  >> RDS >> MariaDB

Imposta il set di caratteri e le regole di confronto di una tabella in MariaDB

È 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.