5° Anno TEORIA 4. Introduzione al linguaggio SQL | Page 38

16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
Immaginiamo di volere effettuare delle QUERY case-sensitive in MySql a prescindere dalla natura delle tabelle in esso contenute , quindi anche in caso di COLLATION case-insensitive
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 .
Ribadiamo che ciò avviene in base alle impostazioni previste di default da MySql quando si crea una nuova tabella riguardanti CHARACTER SET e COLLATION che vengono impostati in modo da non differenziare maiuscole e minuscole .
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 .
La soluzione a tale problematica da un punto di vista pratico è semplicissima . Basterà usare all ' interno delle nostre query la funzione BINARY .
La funzione BINARY
Questa funzione consente di eseguire un confronto fra stringhe non in base ai caratteri ma byte per byte , ovvero un confronto della codifica binaria . Occorre ulteriormente precisare che tale funzione tiene conto anche di eventuali spazi vuoti e qundi una stringa ' a ' sarà diversa da ' a '.
SELECT * FROM < Tabella > WHERE BINARY (< Nome _ Colonna >) = '< valore _ Colonna >' ;
N . B . Le parentesi tonde alla funzione BINARY posso essere omesse
IN CONCLUSIONE
Tutto ciò solitamente avviene in quanto il confronto riguarda campi in formato testuale ( CHAR , VARCHAR e TEXT ) in cui si è scelto l ' impostazione di default per lo character set e il collation che sono rispettivamente latin1 e latin1 _ swedish _ ci ( meglio utilizzare l ’ utf _ 8 )
Quindi , quando ci si trova in fase di creazione di una tabella , occorrerebbe tener conto anche di come si desidera poi effettuare i confronti .
Nella scelta fra i diversi tipi di collation occorre porre attenzione ai suffissi quali ci , cs e bin i quali stanno appunto a significare rispettivamente case insensitive , case sensitive ed binary .
Esistono , in pratica , set di caratteri più " precisi " rispetto ad altri che invece equiparano tra loro maiuscole , minuscole ed accentate senza fare alcua differenza
Bisogna fare molta attenzione in quanto scegliere uno character set e collation più preciso determina un maggiore spazio occupato nel database e , di conseguenza , query che richiedono confronti più lente .
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 38