0 commenti mysql

Le query che prevedono le condizioni WHERE o LIKE senza gli opportuni accorgimenti eseguono un confronto case insensitive, ovvero non fanno alcuna distinzione tra maiuscole e minuscole. Ciò avviene in base alle impostazioni previste di default da MySql quando si crea una nuova tabella riguardanti character set e collation.

Eppure, in alcuni ambiti le lettere maiuscole e minuscole possono essere molto importanti: pensiamo, ad esempio, al caso in cui desidera tenerne conto di ciò nella procedura di verifica password in un sistema di login (a cui però non è stato applicato un hash come md5 o sha1).

 

Inoltre, in tali casi il confronto equipara anche le lettere con accenti diversi tale per cui 'e', 'è' ed 'é' sono indistinte.

 

Query case sensitive

La soluzione a tale problematica da un punto di vista pratico è semplicissima. Vi basterà usare all'interno delle vostre query l'operatore BINARY.

SELECT *  FROM table WHERE BINARY text_colum = 'value'

 

L'operatore BINARY

Questo operatore consente di eseguire un confronto fra stringhe non in base ai caratteri ma sarà un confronto byte per byte, ovvero un confronto della codifica binaria.

Occorre ulteriormente precisare che tiene conto anche di eventuali spazi vuoti e qundi una stringa 'a' sarà diversa da 'a '.

 

Lo character set e collation per confronti case sensitive

Tutto ciò solitamente avviene in quanto il confronto riguarda campi in formato testuale (CHAR, VARCHAR, TEXT) in cui si è scelto l'impostazione di default per lo character set e il collation che sono rispettivamente latin1 e latin1_swedish_ci.

Quindi, quando in fase di creazione di una tabella scegliete questi due parametri dovreste tener conto anche di come andrete poi ad effettuare i confronti.

 

Nella scelta fra i diversi tipi di collation vi invito a porre attenzione ai suffissi quali ci, cs e bin i quali stanno appunto a significare case sensitive, case insensitive ed binary. Esistono, in pratica, set di caratteri più "precisi" rispetto ad altri che invece equiparano maiuscole, minuscole ed accentate.

 

Concludo l'articolo rammentandovi però che uno character set e collation più preciso determina un maggiore spazio occupato nel database e query che richiedono confronti più lente.

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

0 Commenti presenti