<?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>davideferrero.com &#187; Varchar</title>
	<atom:link href="http://blog.davideferrero.com/tag/varchar/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.davideferrero.com</link>
	<description>&#62; Web developer for passion</description>
	<lastBuildDate>Sun, 13 Nov 2011 15:55:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Differenze tra il tipo char e il varchar in MySQL</title>
		<link>http://blog.davideferrero.com/2010/05/differenze-char-varchar-mysql/</link>
		<comments>http://blog.davideferrero.com/2010/05/differenze-char-varchar-mysql/#comments</comments>
		<pubDate>Sun, 30 May 2010 17:28:34 +0000</pubDate>
		<dc:creator>davide</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Char]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[DB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Varchar]]></category>

		<guid isPermaLink="false">http://blog.davideferrero.com/?p=451</guid>
		<description><![CDATA[Prosegue il mio lavoro insieme a MySQL, ormai lo sto usando intensamente in molti programmi non solo in php, ma anche nella programmazione in java. Usandolo così massicciamente sto continuando a scoprire cose interessanti. Probabilmente quella di cui vi parlo oggi, non è una novità per qualcuno, ma credo sia bene chiarirla per chi non [...]]]></description>
			<content:encoded><![CDATA[<p>Prosegue il mio lavoro insieme a MySQL, ormai lo sto usando intensamente in molti programmi non solo in php, ma anche nella programmazione in java.</p>
<p>Usandolo così massicciamente sto continuando a scoprire cose interessanti. Probabilmente quella di cui vi parlo oggi, non è una novità per qualcuno, ma credo sia bene chiarirla per chi non lo sapesse.</p>
<p>Qualche giorno fa stavo lavorando su un database che non ho creato io e mi sono imbattuto in un campo <strong>CHAR</strong>. Subito non ci ho fatto caso, ma poi mi è venuto in mente che di solito quando devo dichiarare un campo stringa, uso il tipo <strong>VARCHAR</strong>. Mi sono così documentato un po&#8217;, cercando su google ho trovato diverse spiegazioni su forum, ma come sapete di quello che viene detto sui forum è sempre meglio non fidarsi troppo. Ho fatto quindi direttamente riferimento alla <a title="MySQL reference manual" href="http://dev.mysql.com/doc/refman/5.1/en/" target="_blank">guida ufficiale MySQL (in inglese)</a> e ho scoperto quello che mi interessava.</p>
<p>Innanzitutto prima di MySQL 5.0.3 sia il tipo <strong>char</strong> sia il <strong>varchar</strong> potevano essere dimensionati da 0 a 255 caratteri. Da MySQL 5.0.3 in poi il tipo <strong>varchar</strong> supporta lunghezza da 0 a 65535 caratteri. Oltre a questa differenza di dimensionamento c&#8217;è un&#8217;altra sostanziale differenza: quando dimensionate un campo con il tipo <strong>char</strong>, ad esempio char(4) verrà effettivamente occupato spazio per 4 caratteri, anche se il valore che inserirete nel campo sarà di un solo carattere. Lo spazio rimanente verrà riempito con degli spazi. A differenza del <strong>char</strong>, il <strong>varchar</strong> invece utilizza solamente lo spazio necessario, richiesto dal valore inserito nel campo più un byte (non sono riuscito a trovare il motivo, ma credo sia il famoso &#8220;tappo&#8221; in stile C).</p>
<p>Riepilogando quindi:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Valore</strong></td>
<td><code>CHAR(4)</code></td>
<td><strong>Spazio richiesto<br />
</strong></td>
<td><code>VARCHAR(4)</code></td>
<td><strong>Spazio richiesto<br />
</strong></td>
</tr>
<tr>
<td><code>''</code></td>
<td><code>'    '</code></td>
<td>4 bytes</td>
<td><code>''</code></td>
<td>1 byte</td>
</tr>
<tr>
<td><code>'ab'</code></td>
<td><code>'ab  '</code></td>
<td>4 bytes</td>
<td><code>'ab'</code></td>
<td>3 bytes</td>
</tr>
<tr>
<td><code>'abcd'</code></td>
<td><code>'abcd'</code></td>
<td>4 bytes</td>
<td><code>'abcd'</code></td>
<td>5 bytes</td>
</tr>
<tr>
<td><code>'abcdefgh'</code></td>
<td><code>'abcd'</code></td>
<td>4 bytes</td>
<td><code>'abcd'</code></td>
<td>5 bytes</td>
</tr>
</tbody>
</table>
<p>Per finire, come si può vedere nell&#8217;ultima riga dell&#8217;esempio, per tutti e due i tipi, se il valore supera la lunghezza effettiva dichiarata, esso verrà troncato.</p>
<p>In sostanza se sapete che nel campo che state dichiarando dovrete inserire valori sempre della stessa lunghezza, senza eccezioni, potrebbe essere intelligente dichiararlo <strong>char</strong> mentre invece se, come succede nella stragrande maggioranza dei casi, il campo che state dichiarando conterrà stringhe generiche, allora vi converrà utilizzare il tipo <strong>varchar</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davideferrero.com/2010/05/differenze-char-varchar-mysql/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

