← Tutti gli articoliPHP e database

PHP e database

MySql – Impostare la collation di default

Matteo Galacci ·

Il character set definisce i caratteri rappresentabili; la collation stabilisce regole di confronto e ordinamento. In MySQL 8 usa utf8mb4 per Unicode completo, evitando di trattare il vecchio alias utf8 come equivalente.

CREATE DATABASE esempio
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

La collation dell’esempio è specifica di MySQL 8: verifica disponibilità e compatibilità se usi MariaDB o versioni differenti. ai e ci indicano confronti senza distinzione di accenti e maiuscole; non sono adatti a ogni dominio, ad esempio identificativi che devono distinguere le maiuscole.

SELECT VERSION(), @@character_set_server, @@collation_server;
SHOW COLLATION WHERE Charset = 'utf8mb4';

Il default server si configura con character-set-server e collation-server nel file effettivamente letto da mysqld. Cambiare il default del server o del database non converte i dati e le colonne esistenti. Una conversione va pianificata e provata su copia, controllando indici unici e possibili collisioni. “MySQL 14.14” nel vecchio articolo indicava una versione del client, non la release del server.

Impostare e verificare il default

Per un server MySQL 8, dopo aver salvato una copia del file INI effettivamente usato, sotto [mysqld] puoi impostare:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci

Programma il riavvio del servizio secondo l’installazione. Ricollegati e ripeti la SELECT delle variabili riportata sopra: devono mostrare i valori scelti. Per il database creato nell’esempio usa:

SHOW CREATE DATABASE esempio;

Il risultato deve contenere charset e collation attesi. Per cambiare soltanto il default di un database esistente usa ALTER DATABASE esempio CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; rimane distinto dalla conversione delle colonne. Non applicare questa collation specifica MySQL 8 a MariaDB.

Fonti e approfondimenti