<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EXIT4web &#187; MySQL</title>
	<atom:link href="http://www.exit4web.net/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.exit4web.net</link>
	<description>Professional web services.</description>
	<lastBuildDate>Wed, 08 Sep 2010 16:38:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Forzare UTF-8 via MySQL</title>
		<link>http://www.exit4web.net/2008/09/forzare-utf-8-via-mysql/</link>
		<comments>http://www.exit4web.net/2008/09/forzare-utf-8-via-mysql/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 20:59:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[mysqli]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://www.exit4web.net/?p=5</guid>
		<description><![CDATA[Breve vademecum all&#8217;uso dei charset UTF-8 con MySQL.
Nell&#8217;articolo pubblicato sabato scorso dal titolo &#8220;Possibili problemi con Latin1&#8221; manca un aspetto fondamentale da ricordare una volta convertito il proprio database MySQL e i files del proprio sito dal charset ISO-8859-1 a UTF-8.
MySQL tende infatti ad aprire una connessione con il proprio server utilizzando il charset latin1 [...]]]></description>
			<content:encoded><![CDATA[<p>Breve vademecum all&#8217;uso dei charset UTF-8 con MySQL.</p>
<p>Nell&#8217;articolo pubblicato sabato scorso dal titolo &#8220;<a href="http://www.exit4web.net/2008/08/possibili-problemi-con-latin1/">Possibili problemi con Latin1</a>&#8221; manca un aspetto fondamentale da ricordare una volta convertito il proprio database MySQL e i files del proprio sito dal charset ISO-8859-1 a UTF-8.</p>
<p>MySQL tende infatti ad aprire una connessione con il proprio server utilizzando il charset latin1 (ISO-8859-1) fintanto che non lo si convince del contrario; questo potrebbe creare dei spiacevoli problemi durante la visualizzazione dei testi delle pagine, in particolar modo di quelli che presentano al loro interno caratteri speciali quali gli accenti; per evitare che ciò accada è consigliato ricordare a MySQL di utilizzare una connessione in UTF-8 richiamando la funzione mysql_set_charset(), nel caso utilizziate le vecchie librerie MySQL, oppure mysqli::set_charset() qualora si utilizzino le nuove librerie MySQLi</p>
<pre class="php">// Connessione al DB
$db = mysql_connect('localhost', 'myuser', 'mypassword') or
die('Problemi di connessione al database remoto');
mysql_set_charset('utf8', $db);
mysql_select_db('mydb');

// Esecuzione delle query
mysql_query('SELECT * FROM users WHERE 1', $db);
...</pre>
<p>oppure</p>
<pre class="php">// Connessione al DB
$db = new MySQLi('localhost', 'myuser', 'mypassword', 'mydb') or
die('Problemi di connessione al database remoto');
$db-&gt;set_charset('utf8');

//Esecuzione della query
$rs = $db-&gt;query('SELECT * FROM users WHERE 1');</pre>
<p>Così facendo si avranno alla sorgente i dati memorizzati in UTF-8 (nel DB), i files HTML e/o PHP codificati in UTF-8 e la connessione tra il client e il server MySQL avverrà anch&#8217;essa in UTF-8, garantendo la correttezza nella gestione e nella visualizzazione delle informazioni gestite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exit4web.net/2008/09/forzare-utf-8-via-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Possibili problemi con Latin1</title>
		<link>http://www.exit4web.net/2008/08/possibili-problemi-con-latin1/</link>
		<comments>http://www.exit4web.net/2008/08/possibili-problemi-con-latin1/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 05:32:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mondo Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://www.exit4web.net/?p=7</guid>
		<description><![CDATA[

La migrazione dal vecchio al nuovo server potrebbe creare alcuni disagi soprattutto ai vecchi clienti che utilizzano applicazioni dinamiche o semplici pagine web HTML sviluppate utilizzando il charset Latin1(ovvero l&#8217;ISO-8859-1); il nuovo server infatti opera in UTF-8 sia nella distribuzione delle pagine web (su Apache) che nell&#8217;archiviazione delle informazioni nel database MySQL. Il problema si manifesta prevalentemente [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-64" title="charset-front-big" src="http://www.exit4web.net/wp-content/uploads/charset-front-big.jpg" alt="" width="640" height="400" /></p>
<p>La migrazione dal vecchio al nuovo server potrebbe creare alcuni disagi soprattutto ai vecchi clienti che utilizzano applicazioni dinamiche o semplici pagine web HTML sviluppate utilizzando il charset Latin1(ovvero l&#8217;<a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1" target="_blank">ISO-8859-1</a>); il nuovo server infatti opera in <a href="http://en.wikipedia.org/wiki/Utf8" target="_blank">UTF-8</a> sia nella distribuzione delle pagine web (su Apache) che nell&#8217;archiviazione delle informazioni nel database MySQL. Il problema si manifesta prevalentemente durante la visualizzazione di caratteri speciali quali le lettere accentate (àèìòùé&#8230;) o altri caratteri non standard (°&#8230;).</p>
<p>Per maggiore semplicità riporto un breve vademecum sulla conversione dei contenuti da ISO-8895-1 a UTF-8 in modo da limitare i possibili disservizi che si potrebbero riscontrare.</p>
<p><strong>Conversione di contenuti statici (files JavaScript, HTML ecc..)</strong></p>
<p><img class="size-full wp-image-25 alignleft" style="border: 1px solid #EBEBEB; margin: 0px 8px 8px 0px;" title="charset_problems" src="http://www.exit4web.net/wp-content/uploads/charset_problems.png" alt="" width="84" height="73" /></p>
<p>Qualora fosse stato utilizzato Dreamweaver assicurarsi di specificare UTF-8 come charset per la generazione delle pagine web del proprio progetto. Questo cambiamento comporta, in genera, la conversione dei files del progetto dal vecchi al nuovo formato e la sostituzione del meta-tag <em>Content-Type</em> da ISO-8859-1 a UTF-8:</p>
<pre name="code" class="html">&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</pre>
<p>Completata la conversione del progetto è necessario caricare, via FTP, i nuovi files HTML nella cartella /httpdocs/</p>
<p><strong>Conversione di siti dinamici (con database MySQL)</strong></p>
<p><strong></strong>In generale la conversione di un sito dinamico da ISO-8859-1 a UTF-8 è un&#8217;operazione particolarmente complessa e che potrebbe richiedere più di qualche ora di lavoro a seconda, ovviamente, dell&#8217;entità del progetto. La conversione del progetto si estende su due livelli: 1. Livello dati 2. Livello applicazione   <em>- Conversione a livello dati</em> Gran parte dei siti sviluppati in ISO-8859-1 fanno uso di tabelle memorizzate in MySQL utilizzando il charset latin1_*. La conversione di tale tipi di dati potrebbe limitarsi all&#8217;esecuzione di un numero ristretto di query SQL necessarie per convertire le tabelle e i dati in esse contenute da latin1_* a utf8_*. Nello specifico dovrà essere eseguita la query sottostante per ciascuna tabella presente nel sito sostituendo opportunamente <em>tableName</em> con il nome della tabella da convertire.</p>
<pre name="code" class="SQL">ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;</pre>
<p>Nella maggior parte dei casi non dovrebbero presentarsi problemi di conversione ma potrebbe, in taluni casi, generare un errore interno n°150.</p>
<p>Tale errore si presenta solitamente qualora si utilizzi tabelle InnoDB con relazioni attive su chiavi di tipo stringa; in questo caso la conversione del database (o delle tabelle in questione) potrebbe non concludersi correttamente. In tal caso potrebbe essere necessario intervenire direttamente nel server per fare un dump completo del Database, convertirlo utilizzando iconv da ISO-8895-1 a UTF-8, effettuare una ricerca e sostituzione veloce della direttiva CHARSET da latin_1 a utf_8, cancellare il vecchio database (o le vecchie tabelle) e caricare il nuovo dump MySQL opportunamente modificato.</p>
<p>Sintetizzando:</p>
<pre name="code" class="sh">mysqladmin --opt -umioUtente -p mioDB &gt; ./mioDB_latin1.sql
****
iconv -c -f latin1 -t utf-8 ./mioDB_latin1.sql &gt; mioDB_utf8.sql</pre>
<p>A questo punto aprire il nuovo documento mioDB_utf8.sql con un editor di testo (che possibilmente lavori in UTF-8), cercare la stringa &#8220;CHARSET=latin1&#8243; e sostituirla con &#8220;CHARSET=utf8&#8243;.</p>
<pre name="code" class="sh">mysql -umioUtente -p
****
use mioDB
\. ./mioDB_utf8.sql </pre>
<p>A questo punto non resta che convertire gli scripts PHP in modo da non interferire con il charset UTF-8.</p>
<p><em>- Conversione a livello applicazione</em></p>
<p>Per il completamento di questa seconda fase di lavoro è consigliato scaricare l&#8217;intera cartella /httpdocs nel proprio computer e operare con un editor di testo che consenta la ricerca globale del testo all&#8217;interno di un progetto (sotto Mac consiglio l&#8217;uso di TextMate).</p>
<p>Il primo aspetto da tenere in considerazione è che la funzione htmlentities() opera in ISO-8859-1 di default e spesso è la causa dei problemi di visualizzazione dei testi delle pagine dinamiche. Per risolvere questo problema si può optare per una delle due soluzioni disponibili:<br />
1. completamento della chiamata alla funzione<br />
2. conversione della funzione</p>
<p><em>Completamento della chiamata alla funzione</em></p>
<p>Per rendere la funzione htmlentities() compatibile con il charset UTF-8 è necessario aggiungere come secondo parametro la constante ENT_QUOTES e come terzo parametro la stringa &#8216;utf-8&#8242;</p>
<pre name="code" class="php">// Esempio di chiamata alla funzione pre-utf8
echo htmlentities($rs-&gt;nome);

// Ecco come deve essere modificata la chiamata alla funzione:
echo htmlentities($rs-&gt;nome, ENT_QUOTES, 'utf-8');</pre>
<p>Tale soluzione potrebbe non essere una delle migliori dovendo intervenire con una regular expression per la sostituzione di tutte le chiamate ad htmlentities() del proprio progetto. Qualora non si disponga di sufficiente pazienza si consiglia di optare per la soluzione 2, altrettanto efficace e meno impegnativa.</p>
<p><em>Conversione della funzione</em></p>
<p>La funzione htmlentities() può essere nella maggior parte dei casi sostituiti da htmlspecialchars().<br />
La prima infatti tende ad interferire con i caratteri speciali quali le lettere accentate andandole a sostituire con gli equivalenti in HTML (per esempio è diventa &amp;egrave;). La seconda invece si limita a convertire un set limitato di caratteri quali il maggiore e il minore, la e commerciale, il singolo e il doppio apice in entità HTML (per esempio la e commerciale &amp; diventa &amp;amp;)</p>
<pre name="code" class="php">// Esempio di chiamata alla funzione pre-utf8
echo htmlentities($rs-&gt;nome);

// Ecco come deve essere modificata la chiamata alla funzione
echo htmlspecialchars($rs-&gt;nome);</pre>
<p>Questa operazione è molto più semplice da fare e con l&#8217;opportuna accortezza potrebbe richiedere non più di qualche minuto di lavoro; per prima cosa è necessario aprire il progetto nel proprio editor di testi, lanciare una ricerca globale in tutti i files del progetto della stringa &#8220;htmlentities(&#8221; e sostituirla con &#8220;htmlspecialchars(&#8220;.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-85" title="find-in-project" src="http://www.exit4web.net/wp-content/uploads/find-in-project.jpg" alt="" width="640" height="165" /></p>
<p><strong>Note conclusive</strong></p>
<p>Completata la conversione del database e dell&#8217;applicazione è necessario assicurarsi che tutte le pagine facciano uso del charset UTF-8; volendo si può lanciare un iconv per ciascun documento HTML o PHP del proprio progetto ricordandosi però di impostare nel proprio editor di test il charset UTF-8 come codifica principale di lavoro. E&#8217; infine fondamentale ricordarsi di sostiture il meta-tag Content-type come descritto nella sezione &#8220;Conversione di contenuti statici&#8221;.</p>
<p style="text-align: center;"><img class="size-full wp-image-87 aligncenter" title="textmate-utf8" src="http://www.exit4web.net/wp-content/uploads/textmate-utf8.png" alt="" width="530" height="482" /></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.exit4web.net/2008/08/possibili-problemi-con-latin1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

