Encoding e Collation in MySQL

Mi sono imbattuto in un problema bloccante di un sito web: la non coerente adozione di uno stesso encoding in tutti i “pezzi” dell’applicazione web provoca errori bloccanti.

In sostanza ci sono in MySQL due caratteristiche:

  1. l’encoding (codifica) che è la mappatura tra il simbolo (ad esempio “è”) ed il codice esadecimale che lo rappresenta in un file, in un pacchetto TCP/IP, in un database.
  2. la collation (confronto) che consiste in una serie di regole secondo le quali le stringhe vengono confrontate.

Traggo queste informazioni dal sito della MySQL AB.

Collation binaria

Supponiamo di avere questo alfabeto A={‘a’,’b’,’A’,’B’}.

L’encoding (la codifica) è l’insieme c={0, 1, 2, 3}.

IL charset è la mappa c -> A che si può esprimere nella tabella

Simbolo Codice
a 0
b 1
A 2
B 3

La collation è una regola che ci consente di confrontare le stringhe. Confrontare le stringhe sembra semplice, ma ha le sue difficoltà. A partire da una regola lessocigrafica ‘a’ < ‘b’ (a precede b), possiamo utilizzare i codici (visto che hanno la mappa conserva l’ordinamento) per stabilirlo (0 < 1 quindi ‘a’ < ‘b’). Questa si dice collation binaria. Funziona anche se confrontiamo ‘A’ e ‘B’ (infatti questo lo possiamo dedurre dal momento che 2<3).

Ma, secondo questa regola di confronto, ‘b’ < ‘A’!

Dobbiamo adottare una regola più complessa, ad esempio la collation di tipo case-insensitive.

Secondo questa regola dobbiamo prima calcolare c mod 2 per ogni carattere e poi confrontare i codici risultanti, quindi stabiliamo che ‘A’ < ‘b’ (e non il contrario come suggerirebbe il confronto binario).

La cosa si complica se utilizziamo caratteri ‘è’, ‘à’… anzi… ogni lingua ha le sue regole di precedenza. Quindi se al DB chiediamo di fare confronti di stringhe è necessario impostare l’algoritmo giusto per quella lingua.

First Arpanet Message

Ho trovato a questo indirizzo una commemorazione del primo messaggio ARPANET, risalente al 29 ottobre 1969.

Altri collegamenti interessanti sulla storia di Internet:

Corso IFTS ITIS Zuccante di Venezia-Mestre

Terza settimana di lezioni “Creazione Siti Web” del corso IFTS per la formazione di “Tecnico superiore per lo sviluppo del software finalizzato alla valorizzazione e promozione turistica, culturale ed ambientale del territorio”.

Nelle prime due settimane di corso sono stati trattati:

  • il protocollo HTTP
  • il linguaggio XHTML 1.0
  • il linguaggio CSS 2.0
  • problematiche di presentazione cross-media e cross-browser ed il problema della codifica dei caratteri.

In questa settimana si concentreranno delle sessioni di esercitazione su un soggetto a tema.

Documentazione di riferimento:

Disdette vocali per ULSS 16 / Azienda Ospedaliera di Padova

Ho integrato un sistema di gestione prenotazioni con un riconoscitore vocale per permettere la disdetta di prenotazioni di visite mediche ed esami clinici erogati attraverso il CUP dalle Aziende Sanitarie padovane.

Il Sistema di Gestione Prenotazioni mette a disposizione un servizio di back end invocabile via socket. Si accede alle primitive del servizio sulla base delle indicazioni ritornate dal front end vocale (Loquendo, http://www.speechvillage.com) che acquisisce il parlato del paziente sulla base di un breve questionario somministrato all’interlocutore telefonico per garantire l’accesso sicuro ai propri dati.

Il sistema è attualmente in grado di gestire il 70% delle chiamate, con notevole sgravio degli operatori telefonici del CUP; per il rimanente 30% si sta agendo sia sul perfezionamento dell’infrastruttura tecnologica che delle alternative nei dati di accesso alla disdetta.