SQL COLLATE spiegato bene e senza errori

26 agosto 2026

Codice PHP che definisce le impostazioni del database, inclusa la configurazione del sql collate.

Indice

Due stringhe identiche per una persona possono risultare diverse per un database: “caffè” e “CAFFE”, per esempio, dipendono dalle regole di confronto impostate. Capire il tema di sql collate aiuta a gestire correttamente ordinamenti, ricerche, confronti e dati multilingue, evitando risultati incoerenti e problemi negli indici.

Le regole di confronto decidono come il database interpreta il testo

  • Character set indica come i caratteri vengono rappresentati e memorizzati.
  • Collation stabilisce come le stringhe vengono confrontate e ordinate.
  • Le opzioni case-sensitive e accent-sensitive cambiano il risultato di ricerche e confronti.
  • La clausola COLLATE può essere applicata al database, alla colonna o a una singola espressione.
  • MySQL, SQL Server e PostgreSQL usano sintassi e nomi di collazione differenti.

Codice PHP che definisce le impostazioni del database, inclusa la configurazione del sql collate.

Che cosa significa COLLATE in SQL

Una collation è un insieme di regole che stabilisce come il database confronta i caratteri di una stringa. Non decide soltanto l’ordine alfabetico, ma anche se maiuscole, minuscole, accenti e simboli devono essere considerati equivalenti oppure diversi.

Con una collazione case-insensitive, ad esempio, “Roma” e “roma” possono risultare uguali in una condizione con =. Con una collazione case-sensitive, invece, la differenza tra maiuscola e minuscola viene mantenuta. Lo stesso principio vale per gli accenti: “caffe” e “caffè” possono coincidere oppure no.

Queste regole influenzano diverse operazioni quotidiane, tra cui WHERE, JOIN, ORDER BY, LIKE, vincoli UNIQUE e ordinamento dei risultati. Per questo non considero la collation una semplice impostazione estetica: può cambiare il comportamento applicativo.

Character set e collation non sono la stessa cosa

Il character set descrive l’insieme dei caratteri disponibili e il modo in cui vengono codificati. UTF-8, per esempio, permette di rappresentare lettere accentate, alfabeti non latini, simboli e caratteri emoji in modo molto più completo rispetto a vecchie codifiche a singolo byte.

La collation lavora sopra questi caratteri e definisce le regole di confronto. In termini semplici, il character set risponde alla domanda “come salvo il carattere?”, mentre la collation risponde a “come stabilisco se due caratteri sono uguali e in quale ordine li mostro?”.

Elemento Funzione Esempio
Character set Codifica e rappresentazione dei caratteri utf8mb4
Collation Confronto e ordinamento delle stringhe utf8mb4_0900_ai_ci
Case sensitivity Decide se distinguere maiuscole e minuscole CI oppure CS
Accent sensitivity Decide se distinguere lettere accentate AI oppure AS

Un errore frequente consiste nel pensare che cambiare collation possa correggere caratteri già danneggiati. Non è così. Se un testo è stato salvato con una codifica errata e appare come “è” invece di “è”, serve una procedura di conversione dei dati, non una semplice modifica delle regole di ordinamento.

Come usare COLLATE nelle query

La clausola può essere applicata a una singola espressione quando serve un comportamento diverso da quello predefinito. È una soluzione utile durante una migrazione, in una ricerca particolare o quando si confrontano colonne con impostazioni differenti.

Confrontare senza distinguere maiuscole e minuscole

SELECT *
FROM utenti
WHERE cognome COLLATE utf8mb4_0900_ai_ci = 'rossi';

Questo esempio è tipico di MySQL e rende il confronto insensibile a maiuscole e minuscole, se la collation scelta lo prevede. Il nome disponibile, però, dipende dal character set e dalla versione del database.

Ordinare secondo una regola precisa

SELECT nome
FROM clienti
ORDER BY nome COLLATE Latin1_General_100_CI_AI;

In SQL Server la sintassi dei nomi è diversa. Le sigle CI e AI indicano rispettivamente un confronto non sensibile a maiuscole e accenti. Per nuovi progetti preferisco in genere le collazioni Windows più recenti rispetto alle vecchie collazioni SQL, soprattutto quando sono importanti Unicode e compatibilità linguistica.

Applicare una collazione in PostgreSQL

SELECT descrizione
FROM prodotti
ORDER BY descrizione COLLATE "it_IT";

PostgreSQL tratta le collazioni come oggetti associati a impostazioni locali o a ICU. Il nome esatto disponibile dipende dall’ambiente e dalle locale installate, quindi conviene verificare prima le collazioni presenti invece di copiare un nome da un altro server.

Le differenze tra MySQL, SQL Server e PostgreSQL

Il concetto è comune, ma l’implementazione cambia parecchio. Questa è la ragione per cui una collazione valida in MySQL non può essere trasferita direttamente in SQL Server o PostgreSQL.

Database Impostazioni tipiche Particolarità pratica
MySQL utf8mb4_0900_ai_ci, utf8mb4_bin Il nome contiene spesso indicazioni su Unicode, sensibilità agli accenti e maiuscole.
SQL Server Latin1_General_100_CI_AS La collation può essere definita a livello di server, database, colonna o espressione.
PostgreSQL "it_IT", "C", collazioni ICU Il comportamento dipende anche dal provider locale e dalla configurazione del sistema.

In MySQL la lista delle collazioni si può controllare con SHOW COLLATION. In SQL Server è possibile interrogare sys.fn_helpcollations(), mentre PostgreSQL espone le collazioni tramite i cataloghi e i comandi dedicati. Verificare prima l’ambiente evita errori banali durante deployment e migrazioni.

La differenza diventa evidente nei database che gestiscono più lingue. Una regola adatta all’italiano potrebbe non produrre l’ordine atteso per il turco, il tedesco o le lingue nordiche. Per questo, quando l’applicazione è internazionale, scelgo la collation sulla base dei dati e dei requisiti reali, non del nome che sembra più intuitivo.

Gli errori più comuni e come risolverli

Collation incompatibili nel confronto

Quando due colonne usate in un confronto hanno collazioni diverse, il database può segnalare un conflitto oppure applicare regole implicite non desiderate. Il problema appare spesso nei JOIN tra tabelle create in momenti diversi o dopo l’importazione di dati da un altro sistema.

La correzione più rapida consiste nell’imporre una collation all’interno della query. La soluzione più solida, però, è uniformare character set e collation delle colonne che partecipano regolarmente agli stessi confronti.

Ricerche che non trovano il risultato atteso

Una ricerca su LIKE può comportarsi diversamente da quanto immagina l’utente. Se la collation è sensibile agli accenti, una ricerca per “cafe” potrebbe non trovare “caffè”. Se è troppo permissiva, al contrario, potrebbe restituire record che l’applicazione dovrebbe distinguere.

Prima di modificare la query, controllo sempre tre elementi: collation della colonna, collation del parametro e comportamento dell’indice. Convertire tutto con funzioni come LOWER() può risolvere il confronto, ma può anche impedire l’uso efficiente di un indice se non esiste un indice adatto all’espressione.

Leggi anche: Ciclo for in Python - guida a range, enumerate, zip e SQLite

Ordinamento apparentemente “sbagliato”

L’ordine alfabetico non è universale. Una collation linguistica può ordinare le parole secondo regole locali, mentre una collation binaria confronta principalmente i valori codificati. La seconda è spesso veloce e prevedibile per identificatori tecnici, ma raramente è la scelta migliore per nomi e testi mostrati agli utenti.

Io tengo separati i due casi. Per codici, token e chiavi tecniche preferisco un confronto binario o strettamente deterministico; per nomi di persone, città e descrizioni uso una regola linguistica coerente con il pubblico dell’applicazione.

Come scegliere una collation senza creare problemi futuri

Per un nuovo progetto partirei da Unicode completo, una collation coerente con la lingua principale e una decisione esplicita su maiuscole e accenti. Lasciare che ogni tabella erediti impostazioni casuali dal server è comodo all’inizio, ma rende le migrazioni molto più rischiose.

  • Stabilisci il character set prima di creare le tabelle.
  • Decidi se “A” e “a” devono essere equivalenti.
  • Decidi se “e” ed “è” devono essere distinte nelle ricerche.
  • Usa la stessa collation per colonne che vengono confrontate spesso.
  • Testa =, LIKE, ORDER BY e vincoli UNIQUE con dati reali.
  • Controlla gli indici dopo aver applicato COLLATE a una query.

Per un catalogo italiano, ad esempio, una ricerca insensibile alle maiuscole può essere comoda, mentre per username, codici prodotto e indirizzi email potrebbe servire una regola più rigida. Non esiste una collation migliore in assoluto: esiste quella adatta al significato del campo e alle aspettative degli utenti.

La scelta giusta nasce dai dati che vuoi proteggere

La clausola COLLATE è piccola, ma può influenzare una parte sorprendentemente ampia dell’applicazione. Stabilisce come il database confronta, ordina e considera uguali le stringhe, quindi va scelta insieme al modello dei dati e non aggiunta soltanto quando compare un errore.

La regola pratica che seguo è semplice: Unicode per rappresentare correttamente i caratteri, collation coerente per interpretarli. Dopo aver definito queste due basi, conviene verificare query, indici e vincoli con esempi realistici, soprattutto se il sistema deve gestire nomi, accenti o più lingue.

Domande frequenti

Il character set stabilisce come i caratteri vengono codificati e memorizzati, mentre la collation definisce come vengono confrontati e ordinati. Per esempio, utf8mb4 è un character set e utf8mb4_0900_ai_ci è una collation.

COLLATE può rendere un confronto sensibile o insensibile a maiuscole e accenti. Una collation case-insensitive può considerare equivalenti Roma e roma, mentre una collation accent-sensitive può distinguere cafe da caffè. Le regole influenzano anche LIKE, JOIN e i vincoli UNIQUE.

In MySQL si possono usare nomi come utf8mb4_0900_ai_ci o utf8mb4_bin. SQL Server usa nomi come Latin1_General_100_CI_AI, mentre PostgreSQL può usare collazioni come it_IT o collazioni ICU. I nomi disponibili dipendono dall ambiente, quindi vanno verificati prima dell uso.

La soluzione rapida consiste nell applicare COLLATE direttamente nella query per uniformare il confronto. Se il problema riguarda colonne usate spesso insieme, è più solido rendere coerenti character set e collation alla struttura del database, controllando anche l effetto sugli indici.

Valuta l'articolo

Valutazione: 0.00 Numero di voti: 0

Tag:

collation unicode mysql sql server postgresql

Condividi post

Sandro Grasso

Sandro Grasso

Sono Sandro e da 3 anni seguo con curiosità il mondo dell'informatica, dell'intelligenza artificiale e delle soluzioni cloud. Ho iniziato questo percorso perché sono affascinato da come queste tecnologie stiano plasmando il nostro futuro e desidero aiutare chi legge a navigare in questo mondo in continua evoluzione, rendendo concetti complessi accessibili e comprensibili. Sul sito bartolomeoalberico.it, mi impegno a fornire contenuti accurati e aggiornati, verificando le informazioni e organizzandole in modo chiaro per offrire una guida utile e affidabile.

Scrivi un commento