<?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>Mundo Geek &#187; mysql</title>
	<atom:link href="http://mundogeek.net/etiqueta/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Wed, 08 Feb 2012 16:09:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SQL Cookbook</title>
		<link>http://mundogeek.net/archivos/2011/05/02/sql-cookbook/</link>
		<comments>http://mundogeek.net/archivos/2011/05/02/sql-cookbook/#comments</comments>
		<pubDate>Mon, 02 May 2011 10:27:19 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[criticas]]></category>
		<category><![CDATA[db2]]></category>
		<category><![CDATA[libros]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[recetas]]></category>
		<category><![CDATA[referencia]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6695</guid>
		<description><![CDATA[SQL Cookbook Calificación: Autor: Anthony Molinaro Año: 2005 Editorial: O&#8217;Reilly&#8220;SQL Cookbook&#8221; o el &#8220;Libro de recetas de SQL&#8221; es un título que, como alguno habrá supuesto por su nombre, pertenece a la popular serie &#8220;Cookbook&#8221; de O&#8217;Reilly, una colección en los que los libros están organizados como si de auténticos recetarios informáticos se tratara, recopilando [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mundogeek.net/wp-content/sql-cookbook.jpg" alt="SQL Cookbook" align="left" style="margin-right:1em"/><a href="http://www.amazon.co.uk/gp/product/0596009763/ref=as_li_ss_tl?ie=UTF8&#038;tag=mundogeek-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=0596009763">SQL Cookbook</a><img src="http://www.assoc-amazon.co.uk/e/ir?t=&#038;l=as2&#038;o=2&#038;a=0596009763" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />
Calificación: <img src="http://mundogeek.net/wp-content/themes/mg5/bueno.png"/><br />Autor: Anthony Molinaro<br />
Año: 2005<br />
Editorial: O&#8217;Reilly<br clear="all"/><br />&#8220;SQL Cookbook&#8221; o el &#8220;Libro de recetas de SQL&#8221; es un título que, como alguno habrá supuesto por su nombre, pertenece a la popular serie &#8220;Cookbook&#8221; de O&#8217;Reilly, una colección en los que los libros están organizados como si de auténticos recetarios informáticos se tratara, recopilando problemas comunes relacionados con la temática estudiada, junto a sus respectivas soluciones. En este caso nos ofrecen más de 150 recetas para <strong>DB2, Oracle, PostgreSQL, MySQL y SQL Server</strong>, distribuidas en más de 600 páginas, a lo largo de 14 capítulos y 2 apéndices.</p>
<p>El libro está pensado para mantenerse al lado del equipo, a la espera de encontrar un problema para el que pudiéramos necesitarlo. Por ello, puede resultar un poco árido de leer, si queremos hacerlo de principio a fin. No obstante, haciéndolo he aprendido un par de cosas bastante útiles, que siempre vienen bien, como la existencia de <code>COALESCE</code> y <code>WITH ROLLUP</code>.</p>
<p>Me ha parecido un buen libro de referencia para desarrolladores con conocimientos básicos o intermedios de SQL (nunca expertos), y es interesante ver cómo, en algunos casos, un SGDB necesita unas pocas líneas para realizar tareas para las que otros SGDB utilizan consultas mucho más complejas.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/05/02/sql-cookbook/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Guardar consultas con parámetros en Navicat</title>
		<link>http://mundogeek.net/archivos/2010/12/14/guardar-consultas-con-parametros-en-navicat/</link>
		<comments>http://mundogeek.net/archivos/2010/12/14/guardar-consultas-con-parametros-en-navicat/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 19:49:01 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[bbdd]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[navicat]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6225</guid>
		<description><![CDATA[Navicat es, desde que lo redescubrí gracias a un compañero de trabajo, mi cliente de base de datos preferido. Tal vez sea por costumbre. Quizás, el que sea multiplataforma (Windows, Linux y Mac OS). O el hecho de que se pueda utilizar con los sistemas gestores de bases de datos más populares del mercado (MySQL, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.navicat.com/">Navicat</a> es, desde que lo redescubrí gracias a un compañero de trabajo, mi cliente de base de datos preferido. Tal vez sea por costumbre. Quizás, el que sea multiplataforma (Windows, Linux y Mac OS). O el hecho de que se pueda utilizar con los sistemas gestores de bases de datos más populares del mercado (MySQL, SQL Server, SQLite, Oracle y PostgreSQL). Lo importante es que me gusta. Y una de las características que me gustan, aunque no sea muy impresionante, es que permite guardar las consultas que utilices habitualmente. Es más, se pueden guardar consultas con parámetros, y Navicat mostrará un diálogo para que introduzcamos un valor al intentar ejecutarla.</p>
<p>Para ello sólo tenemos que preceder el nombre del parámetro con el símbolo del dólar, y rodearlo con corchetes, de esta forma:</p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/navicat-parametros-consultas.png" alt="Consultas con parámetros en Navicat"/></div>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/12/14/guardar-consultas-con-parametros-en-navicat/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>WAMP</title>
		<link>http://mundogeek.net/archivos/2009/11/29/wamp/</link>
		<comments>http://mundogeek.net/archivos/2009/11/29/wamp/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 10:09:54 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wamp]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=4465</guid>
		<description><![CDATA[En el tutorial rápido de PHP que escribí hace unos días comentaba que una opción para instalar Apache, PHP y MySQL de forma rápida y sencilla eran los paquetes WAMP (siglas de Windows + Apache + MySQL + PHP). Contestando a la duda de Marcelo, que me preguntaba qué programa utilizar de entre las distintas [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://mundogeek.net/archivos/2009/11/26/tutorial-rapido-de-php/" title="Tutorial rápido de PHP">tutorial rápido de PHP</a> que escribí hace unos días comentaba que una opción para instalar Apache, PHP y MySQL de forma rápida y sencilla eran los paquetes WAMP (siglas de Windows + Apache + MySQL + PHP). Contestando a la duda de Marcelo, que me preguntaba qué programa utilizar de entre las distintas opciones disponibles, os dejo una pequeña recopilación con las características de los que probablemente sean los 4 programas más conocidos y utilizados, para que podáis juzgar por vosotros mismos.<span id="more-4465"></span></p>
<h2><a href="http://www.appservnetwork.com/" title="AppServ">AppServ</a></h2>
<p>El paquete más desactualizado: su última versión data de hace más de un año.</p>
<ul>
<li>Resultados en Google: 358.000</li>
<li>Última versión estable: 2.5.10 (Junio 2008)</li>
<li>Apache: 2.2.8</li>
<li>PHP: 5.2.6</li>
<li>MySQL: 5.0.51b</li>
<li>phpMyAdmin: 2.10.3</li>
<li>Tamaño: 16.4MB</li>
</ul>
<h2><a href="http://www.easyphp.org/" title="EasyPHP">EasyPHP</a></h2>
<p>Además de Apache, PHP y MySQL también incluye SQLite Manager, para el caso de que queramos utilizar esta base de datos. Se puede utilizar como aplicación portable.</p>
<ul>
<li>Resultados en Google: 646.000</li>
<li>Última versión estable: 5.3.0 (Agosto 2009)</li>
<li>Apache: 2.2.13</li>
<li>PHP: 5.3.0</li>
<li>MySQL: 5.1.37</li>
<li>phpMyAdmin: 3.2.1</li>
<li>Tamaño: 14.7MB</li>
</ul>
<h2><a href="http://www.wampserver.com/en/" title="WampServer">WampServer</a></h2>
<p>Aunque está ligeramente más desactualizado que EasyPHP y XAMPP ofrece addons con los que instalar tantas versiones de Apache, PHP y MySQL como queramos, siendo las últimas versiones que ofrecen para cada aplicación: Apache 2.2.13, MySQL 5.1.40 y PHP 5.3.0. La versión a utilizar para cada componente se puede configurar desde el icono de la barra de notificación.</p>
<ul>
<li>Resultados en Google: 310.000</li>
<li>Última versión estable: 2.0i (Julio 2009)</li>
<li>Apache: 2.2.11</li>
<li>PHP: 5.3.0</li>
<li>MySQL: 5.1.36</li>
<li>phpMyAdmin: 3.2.0.1</li>
<li>Tamaño: 15.3MB</li>
</ul>
<h2><a href="http://www.apachefriends.org/es/xampp.html" title="XAMPP">XAMPP</a></h2>
<p>Posiblemente sea el paquete más utilizado. Tiene versiones para Windows, Linux, Mac OS y Solaris. A parte de Apache, PHP y MySQL también incluye SQLite, Webalizer, OpenSSL, Perl, FileZilla FTP Server, eAccelerator&#8230; y una pequeña aplicación web llamada &#8220;Consola de seguridad&#8221;, para mejorar la seguridad del paquete en caso de que queramos utilizarlo para producción. También hay disponible una versión lite o reducida. Se puede utilizar como aplicación portable.</p>
<ul>
<li>Resultados en Google: 807.000</li>
<li>Última versión estable: 2.0i (Agosto 2009)</li>
<li>Apache: 2.2.12</li>
<li>PHP: 5.3.0</li>
<li>MySQL: 5.1.37</li>
<li>phpMyAdmin: 3.2.0.1</li>
<li>Tamaño: 44MB (Lite 26MB)</li>
</ul>
<h2><a href="http://www.zend.com/en/products/server-ce/" title="Zend Server CE">Zend Server CE</a></h2>
<p>Versiones para Windows, Linux y Mac OS. La versión de pago incluye características de monitorización y diagnóstico, además de soporte técnico, entre otros. Incluye distintas extensiones útiles de PHP de uso común, el depurador de Zend, su framework de desarrollo web, un componente para cachear el bytecode, etc.</p>
<ul>
<li>Resultados en Google: 1.660.000</li>
<li>Última versión estable: 4.0.6 (Noviembre 2009)</li>
<li>Apache: 2.2.14</li>
<li>PHP: 5.3.0</li>
<li>MySQL: 5.1.39 (descarga adicional)</li>
<li>phpMyAdmin: 3.2.2 (descarga adicional)</li>
<li>Tamaño: 51.06MB</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2009/11/29/wamp/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>¿IBM compra Sun Microsystems?</title>
		<link>http://mundogeek.net/archivos/2009/03/18/%c2%bfibm-compra-sun-microsystems/</link>
		<comments>http://mundogeek.net/archivos/2009/03/18/%c2%bfibm-compra-sun-microsystems/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 14:16:27 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[empresas]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=2767</guid>
		<description><![CDATA[En JavaHispano se hacen eco de un artículo de The Wall Street Journal en el que comentan que IBM podría estar en negociaciones para comprar Sun Microsystems, empresa por la que IBM estaría dispuesta a pagar unos 6.500 millones de dólares (el doble de su valor actual en bolsa) en un trato que podría cerrarse [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.javahispano.org/contenidos/es/ibm_en_conversaciones_para_comprar_sun_microsystems/?menuId=NEWS">En JavaHispano</a> se hacen eco de un <a href="http://online.wsj.com/article/SB123735970806267921.html">artículo de The Wall Street Journal</a> en el que comentan que IBM podría estar en negociaciones para comprar Sun Microsystems, empresa por la que IBM estaría dispuesta a pagar unos 6.500 millones de dólares (el doble de su valor actual en bolsa) en un trato que podría cerrarse esta misma semana.</p>
<p>Como la mayoría sabréis Sun es la creadora, entre otros, del lenguaje de programación Java, el sistema operativo Solaris y la suite ofimática OpenOffice.org; además de ser los dueños de la base de datos libre MySQL desde Enero del año pasado.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2009/03/18/%c2%bfibm-compra-sun-microsystems/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>MySQL</title>
		<link>http://mundogeek.net/archivos/2009/02/16/mysql/</link>
		<comments>http://mundogeek.net/archivos/2009/02/16/mysql/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 17:17:04 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[bbdd]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sgdb]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=2533</guid>
		<description><![CDATA[MySQL es uno de los sistemas de gestión de bases de datos más populares del mercado. Se trata de un SGBD basado en el modelo relacional, con licencia dual GPL y propietaria, desarrollado por MySQL AB, una compañía propiedad de Sun Microsystems, creadores de Java, desde Enero de 2008. En esta entrada veremos algunos de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dev.mysql.com/downloads/" title="MySQL">MySQL</a> es uno de los sistemas de gestión de bases de datos más populares del mercado. Se trata de un SGBD basado en el modelo relacional, con licencia dual GPL y propietaria, desarrollado por MySQL AB, una compañía propiedad de Sun Microsystems, creadores de Java, desde Enero de 2008.</p>
<p>En esta entrada veremos algunos de los comandos básicos utilizados a la hora de trabajar con MySQL. Si programas en Java también te puede interesar nuestra entrada sobre <a href="http://mundogeek.net/archivos/2007/01/27/jdbc/" title="JDBC: Bases de datos en Java">JDBC</a>; si programas en Python, nuestra entrada sobre <a href="http://mundogeek.net/archivos/2008/06/25/bases-de-datos-en-python/" title="DB-API: Bases de datos en Python">DB-API</a>.<br />
<span id="more-2533"></span><br />
Para iniciar el cliente indicando el nombre de usuario (en este caso root):</p>
<p class="code">mysql -u root</p>
<p>Para que nos pida la contraseña:</p>
<p class="code">mysql -u root -p</p>
<p>Para especificar la máquina (el host) en el que se aloja el servidor MySQL:</p>
<p class="code">mysql -u root -p -h localhost</p>
<p>Para especificar la base de datos a utilizar por defecto basta añadir el nombre al final. Es equivalente a utilizar más tarde el comando <code>USE</code>.</p>
<p class="code">mysql -u root -p -h localhost base_datos</p>
<p>Para ejecutar un script SQL:</p>
<p class="code">mysql &lt; archivo.sql</p>
<p>o desde la consola de MySQL:</p>
<pre name="code" class="sql">source archivo.sql</pre>
<p>Para crear una base de datos:</p>
<pre name="code" class="sql">CREATE DATABASE base_datos;</pre>
<p>Si ya existe una base de datos con ese nombre, MySQL devolverá un error. Si queremos crear una base de datos solo cuando no exista ya una del mismo nombre (y por lo tanto no obtener este error) podemos añadir el texto <code>IF NOT EXISTS</code>:</p>
<pre name="code" class="sql">CREATE DATABASE IF NOT EXISTS base_datos;</pre>
<p>A la hora de crear la base de datos también se puede especificar el juego de caracteres y la colación (conjunto de reglas utilizadas para comparar los caracteres) a utilizar por defecto. Esto se logra con <code>DEFAULT CHARACTER SET</code> y <code>DEFAULT COLLATE</code> respectivamente. Al definir un juego de caracteres y una colación por defecto para la base de datos, las tablas usarán estos valores por defecto, a menos que se indiquen otros al crear la tabla.</p>
<pre name="code" class="sql">CREATE DATABASE IF NOT EXISTS base_datos
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci;</pre>
<p>También se puede especificar un juego de caracteres y colación a utilizar por defecto para el servidor mediante las opciones <code>--character-set-server</code> y <code>--collation-server</code>.</p>
<p>Para comunicarnos con el servidor usando un cierto juego de caracteres se puede usar el comando <code>SET NAMES</code>.</p>
<pre name="code" class="sql">SET NAMES "utf8";</pre>
<p>Podemos ver una lista de los juegos de caracteres admitidos por MySQL mediante el comando <code>SHOW CHARACTER SET;</code>. Algunos juegos de caracteres comúnmente utilizados son:</p>
<ul>
<li><code>ascii</code>, de American Standard Code for Information Interchange; también conocido como US-ASCII. Es una codificación de caracteres de 7 bits basado en el alfabeto inglés con 95 caracteres imprimibles.</li>
<li><code>latin1</code>, el juego de caracteres por defecto en MySQL. Contrariamente a lo que cabría esperar se trata de la codificación ANSI / CP1252 / WinLatin1 / Windows-1252 y no del estándar de la ISO 8859-1 o del estándar de la IANA ISO-8859-1 (nótese el guión extra; se trata de un super conjunto de ISO 8859-1), que son los que se suelen conocer como Latin-1. Los tres son bastante parecidos, por lo que a menudo se consideran equivalentes erróneamente, y son causa de confusión habitual (de hecho el propio MySQL tenía un <a href="http://bugs.mysql.com/bug.php?id=11216">bug relacionado</a>). En concreto CP1252 se diferencia de ISO-8859-1 en que se utiliza el rango 0&#215;80-0x9F para representar distintos caracteres imprimibles, como el símbolo del euro o el de la libra, en lugar de caracteres de control. A diferencia de ASCII, CP1252, y por lo tanto ISO 8859-1 e ISO-8859-1, son juegos de caracteres de 8 bits, por lo que permiten representar 256 caracteres distintos. Los tres incluyen los caracteres necesarios para representar textos en las lenguas de Europa occidental: afrikaans, alemán, aragonés, asturiano, catalán, danés, escocés, español, feroés, finés, francés, gaélico, gallego, inglés, islandés, italiano, neerlandés, noruego, portugués, sueco y vasco.</li>
<li><code>utf8</code>, de 8-bit Unicode Transformation Format. Unicode es un acrónimo de &#8220;Universal Code&#8221; (código universal) y es, como su nombre indica, un juego de caracteres con el que podemos representar textos escritos en la mayoría de los alfabetos del planeta: latino, árabe, hebreo, griego, japonés, chino, coreano, cirílico, &#8230; UTF-8 en concreto utiliza de 1 a 4 bytes para representar los caracteres, dependiendo del símbolo.</li>
</ul>
<p>Para <code>ascii</code> la colación por defecto es <code>ascii_general_ci</code>, para <code>latin1</code> <code>latin1_swedish_ci</code> y para <code>utf8</code> <code>utf8_general_ci</code>.</p>
<p>Los nombres de las colaciones comienzan con el nombre del juego de caracteres asociado y terminan con <code>_ci</code> (<em>case insensitive</em>) si la comparación no tiene en cuenta mayúsculas y minúsculas, <code>_cs</code> (<em>case sensitive</em>) en caso contrario y <code>_bin</code> si es binaria (también case sensitive). Por tanto se pueden consultar las distintas colaciones disponibles para un juego de caracteres con un comando similar a</p>
<pre name="code" class="sql">SHOW COLLATION LIKE "utf8%";</pre>
<p>Para ver las distintas bases de datos disponibles en nuestro servidor MySQL:</p>
<pre name="code" class="sql">SHOW DATABASES;</pre>
<p>Para borrar una base de datos:</p>
<pre name="code" class="sql">DROP DATABASE base_datos;</pre>
<p>Para seleccionar la base de datos con la que queremos trabajar:</p>
<pre name="code" class="sql">USE base_datos;</pre>
<p>Para ver las tablas de la base de datos:</p>
<pre name="code" class="sql">SHOW TABLES;</pre>
<p>Para ver las columnas de la tabla:</p>
<pre name="code" class="sql">SHOW COLUMNS FROM tabla;</pre>
<p>o bien el atajo:</p>
<pre name="code" class="sql">DESCRIBE tabla;</pre>
<p>e incluso:</p>
<pre name="code" class="sql">DESC tabla;</pre>
<p>Si necesitamos ver también la colación, los privilegios que tenemos o los comentarios de las columnas añadiremos la palabra clave <code>FULL</code> a <code>SHOW COLUMNS</code>:</p>
<pre name="code" class="sql">SHOW FULL COLUMNS FROM tabla;</pre>
<p>Para crear una tabla nueva se usa el comando <code>CREATE TABLE tabla</code> al que se le pasa la definición de las columnas, las posibles restricciones (<em>constraints</em>) y las opciones de la tabla y de partición.</p>
<pre name="code" class="sql">CREATE TABLE usuario (
    id_usuario INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    direccion VARCHAR(50) NOT NULL,
    ciudad VARCHAR(20) NOT NULL,
    edad TINYINT NOT NULL
);</pre>
<pre name="code" class="sql">CREATE TABLE blog (
    id_blog INT PRIMARY KEY AUTO_INCREMENT,
    id_usuario INT REFERENCES usuario(id_usuario),
    titulo VARCHAR(30) NOT NULL
);</pre>
<p>Los tipos de las columnas pueden ser números enteros, números decimales, fechas, horas, cadenas y los <a href="http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html">tipos espaciales</a> del Open Geospatial Consortium, que se omitirán en esta explicación.</p>
<p>Veamos primero los tipos numéricos:</p>
<ul>
<li><code>BIT</code>: Representación en binario de un número. Por defecto es un número binario de 1 bit por lo que su valor puede ser 0 o 1. Se puede utilizar un número distinto de bits, de 1 a 64, pasando el valor entre paréntesis, por ejemplo <code>BIT(8)</code>.</li>
<li><code>TINYINT</code>: Para representar enteros muy pequeños, de -128 a 127. Se puede utilizar la palabra clave <code>UNSIGNED</code> para que almacene solo números positivos, en cuyo caso el rango va de 0 a 255. También se puede indicar el número mínimo de dígitos que queremos utilizar para mostrar el valor encerrando esta cantidad entre paréntesis; si se utiliza la palabra clave <code>ZEROFILL</code> el valor se rellenará con ceros a la izquierda hasta completar el número de dígitos indicado. Esto es así para el resto de tipos enteros, pero se obviará por considerarse de poca utilidad.</li>
<li><code>BOOL</code>: Sinónimo de <code>TINYINT(1)</code>. El valor 0 se considera falso, el resto verdadero.</li>
<li><code>BOOLEAN</code>: Sinónimo de <code>TINYINT(1)</code>. El valor 0 se considera falso, el resto verdadero.</li>
<li><code>SMALLINT</code>: Un entero pequeño, de -32768 a 32767. Si se utiliza <code>UNSIGNED</code> el rango va de 0 a 65535.</li>
<li><code>MEDIUMINT</code>: Un entero de tamaño medio, de -8388608 a 8388607. Si se usa <code>UNSIGNED</code>, de 0 a 16777215.</li>
<li><code>INT</code>: Un entero, con rango de -2147483648 a 2147483647 y de 0 a 4294967295 si es <code>UNSIGNED</code>.</li>
<li><code>INTEGER</code>: Sinónimo de <code>INT</code>.</li>
<li><code>BIGINT</code>: Un entero grande, de -9223372036854775808 a 9223372036854775807 y de 0 a 18446744073709551615 para los <code>UNSIGNED</code></li>
<li><code>SERIAL</code>: Alias para <code>BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE</code>.</li>
<li><code>FLOAT</code>: Un número decimal en coma flotante. Los valores permitidos son el 0 y los valores de -3.402823466E+38 a -1.175494351E-38 y de 1.175494351E-38 a 3.402823466E+38 aunque el rango puede ser menor dependiendo de la máquina y el sistema operativo utilizado. También podemos encontrarnos con algo como <code>FLOAT(3, 2)</code> que indicaría que queremos 3 dígitos, 2 de ellos para los decimales. En este caso <code>UNSIGNED</code> solo sirve para indicar que no permitimos números negativos. Es importante tener en cuenta que los valores <code>FLOAT</code> no son exactos, solo es preciso hasta, aproximadamente, 7 decimales. Si se necesita más precisión hay que utilizar el tipo <code>DECIMAL</code>.</li>
<li><code>DOUBLE</code>: Un número en coma flotante de precisión doble. Los valores permitidos van de -1.7976931348623157E+308 a -2.2250738585072014E-308 y de 2.2250738585072014E-308 a 1.7976931348623157E+308, además del 0, aunque el rango puede ser menor dependiendo de la máquina y el sistema operativo utilizado. Como <code>FLOAT</code>, los valores <code>DOUBLE</code> no son exactos. Es preciso hasta, aproximadamente, 15 decimales. Si se necesita mayor precisión hay que utilizar el tipo <code>DECIMAL</code>.</li>
<li><code>REAL</code>: Sinónimo de <code>DOUBLE</code>, a menos que esté activado el modo <code>REAL_AS_FLOAT</code>, en cuyo caso funciona como sinónimo de <code>FLOAT</code>.</li>
<li><code>DOUBLE PRECISION</code>: Sinónimo de <code>DOUBLE</code>.</li>
<li><code>DECIMAL</code>: Para representar números decimales de forma más precisa que <code>FLOAT</code> y <code>DOUBLE</code>.</li>
<li><code>DEC</code>: Sinónimo de <code>DECIMAL</code></li>
<li><code>NUMERIC</code>: Sinónimo de <code>DECIMAL</code>.</li>
</ul>
<p>Los tipos relativos a fechas y horas son los siguientes:</p>
<ul>
<li><code>DATE</code>: Para representar una fecha en formato YYYY-MM-DD. El rango soportado va desde 1000-01-01 a 9999-12-31.</li>
<li><code>DATETIME</code>: Una combinación de fecha y hora en formato YYYY-MM-DD HH:MM:SS. El rango soportado va desde 1000-01-01 00:00:00 a 9999-12-31 23:59:59.</li>
<li><code>TIMESTAMP</code>: Un <em>timestamp</em>. El rango va desde 1970-01-01 00:00:01 UTC a 2038-01-09 03:14:07 UTC. Si se asigna el valor <code>NULL</code> a un <code>TIMESTAMP</code> se almacenará la fecha y hora actual, por lo que puede ser útil para saber cuándo se realizó la última insección o actualización.</li>
<li><code>TIME</code>: Una hora. El valor se muestra en formato HH:MM:SS. El rango va de -838:59:59 a 838:59:59.</li>
<li><code>YEAR</code>: Un año en formato YYYY. Los valores admitidos son 0000 y los valores de 1901 a 2155. También se puede usar formato YY si se utiliza <code>YEAR(2)</code> en cuyo caso el rango de valores admitidos va de 70 a 69, representando los años de 1970 a 2069.</li>
</ul>
<p>Por último, los tipos de texto son los siguiente:</p>
<ul>
<li><code>CHAR</code>: Cadenas de longitud fija cuyo número de caracteres se especifica entre paréntesis (si no se especifica es 1 por defecto). Este mecanismo de indicar el tamaño entre paréntesis es común para el resto de los tipos, por lo que no se obviará.</li>
<li><code>VARCHAR</code>: Cadena de longitud variable. Opcionalmente se puede indicar el tamaño máximo de la cadena con un número entre paréntesis.</li>
<li><code>BINARY</code>: Similar a <code>CHAR</code> pero en este caso las cadenas se almacenan como binarias.</li>
<li><code>VARBINARY</code>: Similar a <code>VARCHAR</code> pero en este caso las cadenas se almacenan como binarias.</li>
<li><code>BLOB</code>: Un Binary Large OBject (gran objeto binario), para almacenar datos binarios como imágenes. El tamaño máximo es de 65.535 bytes.</li>
<li><code>TINYBLOB</code>: Un <code>BLOB</code> de pequeño tamaño (un máximo de 255 bytes).</li>
<li><code>MEDIUMBLOB</code>: Un <code>BLOB</code> de tamaño medio (un máximo de 16.777.215 bytes; cerca de 16MB)</li>
<li><code>LONGBLOB</code>: Un <code>BLOB</code> de gran tamaño (un máximo de 4GB bytes)</li>
<li><code>TEXT</code>: Un texto con un máximo de 65.535 caracteres (menos si se utilizan caracteres multi-byte, evidentemente).</li>
<li><code>TINYTEXT</code>: Un texto pequeño, con un máximo de 255 caracteres.</li>
<li><code>MEDIUMTEXT</code>: Un texto de longitud media, con un máximo de 16.777.215 caracteres.</li>
<li><code>LONGTEXT</code>: Un texto largo, con un máximo de 4.294.967.295 caracteres.</li>
<li><code>ENUM</code>: Enumerado, un tipo cuyo valor puede ser una cadena de entre las indicadas entre paréntesis.</li>
<li><code>SET</code>: Similar a <code>ENUM</code>, pero en este caso el campo puede tener cero o más valores de entre los indicados entre paréntesis.</li>
</ul>
<p>Para cada columna, además del tipo, podemos definir otras propiedades</p>
<ul>
<li><code>NOT NULL</code>: No se puede introducir valores nulos.</li>
<li><code>DEFAULT valor</code>: Para definir un valor por defecto</li>
<li><code>AUTO_INCREMENT</code>: Para cada tupla añadida a la tabla el valor del campo crecerá en una unidad. Solo puede existir una columna con <code>AUTO_INCREMENT</code> en cada tabla, y debe tratarse de una clave.</li>
<li><code>UNIQUE KEY</code>: Los valores no se pueden repetir. Si puede existir varias tuplas con valor <code>NULL</code> para la columna.</li>
<li><code>PRIMARY KEY</code>: La clave primaria de la relación. Los valores deben ser únicos y no nulos. Una tabla, como es lógico, sólo puede tener una clave primaria. Si necesitamos crear una clave primaria compuesta por varios campos no podemos usar este método en el que definimos las propiedades de un solo campo, sino que tendremos que utilizar una clausula <code>PRIMARY KEY</code></li>
<li><code>COMMENT "comentario"</code>: Comentarios varios sobre el campo.</li>
<li><code>REFERENCES tabla (campo)</code>: Para crear una clave foránea o ajena. De esta forma indicamos este valor toma valores de claves de otra tabla, implementando así una relación 1:N. En esta clausula también podemos indicar las reglas de integridad referencial, es decir, qué ocurrirá cuando se borre (<code>ON DELETE</code>) o se actualice (<code>ON UPDATE</code>) la tupla referenciada. Los valores posibles son <code>RESTRICT</code>, que indica que no se permite la actualización o borrado; <code>CASCADE</code>, con la que la actualización o borrado se propaga; <code>SET NULL</code>, que establece las claves foráneas a <code>NULL</code> y <code>NO ACTION</code>, que en MySQL es similar a <code>RESTRICT</code>.</li>
</ul>
<p>Las restricciones posibles para la tabla son:</p>
<ul>
<li><code>PRIMARY KEY (campo1, campo2, ...)</code>: Para indicar el campo o campos que conforman la clave primaria.</li>
<li><code>KEY (campo1, campo2, ...)</code>: Para crear una clave no primaria ni única. Esto creará un índice para el campo.</li>
<li><code>INDEX (campo1, campo2, ...)</code>: Sinónimo de <code>KEY</code>.</li>
<li><code>FOREIGN KEY (campo1, campo2, ...) REFERENCES tabla (campo3, campo4, ...)</code>: Para crear una clave foránea o ajena. Sigue el mismo formato que <code>REFERENCES</code> para las columnas.</li>
<li><code>CHECK (expresion)</code>: En teoría, para definir otras restricciones. En realidad esta opción se admite por el parser, pero se ignora. Tenemos que recurrir a triggers o disparadores.</li>
</ul>
<p>Para eliminar una tabla:</p>
<pre name="code" class="sql">DROP TABLE tabla;</pre>
<p>Para que no produzca un error si la tabla no existe:</p>
<pre name="code" class="sql">DROP TABLE IF EXISTS tabla;</pre>
<p>Para modificar una tabla se utiliza <code>ALTER TABLE</code> que permite cosas como añadir columnas:</p>
<pre name="code" class="sql">ALTER TABLE tabla ADD COLUMN valor INT;</pre>
<p>Eliminar columnas:</p>
<pre name="code" class="sql">ALTER TABLE tabla DROP COLUMN valor;</pre>
<p>Cambiar la definición de las columnas:</p>
<pre name="code" class="sql">ALTER TABLE tabla MODIFY COLUMN valor TINYINT;</pre>
<p>O renombrar la tabla:</p>
<pre name="code" class="sql">ALTER TABLE tabla RENAME TO tabla2;</pre>
<p>Para insertar valores en una tabla, si vamos a dar valores a todas las columnas:</p>
<pre name="code" class="sql">INSERT INTO usuario VALUES (1, "Pablo Santander", "Calle Bolivia 18", "Madrid", 17);</pre>
<p>Si sólo vamos a dar valores solo a algunas columnas hay que indicar a cuáles especificamente:</p>
<pre name="code" class="sql">INSERT INTO usuario(nombre, direccion, ciudad, edad) VALUES ("Juan Marmota", "Calle Santiago 23", "Sevilla", 21);</pre>
<p>Para insertar varias tuplas con un solo INSERT solo hay que separarlas con comas:</p>
<pre name="code" class="sql">INSERT INTO usuario VALUES
    (3, "Marta Marsopa", "Calle Italia 4", "Madrid", 58),
    (4, "Jaime Torres", "Avenida de Barcelona 12", "Valladolid" , 37),
    (10, "Juan Martero", "Calle Madrid 12", "Barcelona", 26);</pre>
<pre name="code" class="sql">INSERT INTO blog VALUES
    (1, 1, "El emo blog"),
    (2, 2, "El ego blog"),
    (4, 4, "Mis fotos"),
    (5, 5, "En Groenlandia");</pre>
<p>Para actualizar las tuplas:</p>
<pre name="code" class="sql">UPDATE usuario
    SET nombre = "Marta Marsupial", direccion = "Calle Italia 14"
    WHERE id = 3;</pre>
<p>Para borrar tuplas:</p>
<pre name="code" class="sql">DELETE FROM usuario
    WHERE id = 2;</pre>
<p>Para borrar todas las tuplas de una tabla:</p>
<pre name="code" class="sql">DELETE FROM usuario;</pre>
<p>o bien:</p>
<pre name="code" class="sql">TRUNCATE usuario;</pre>
<p>Para seleccionar tuplas se utiliza <code>SELECT</code>. Basta con especificar qué columnas queremos seleccionar de las tuplas y la tabla en la que se encuentran:</p>
<pre name="code" class="sql">SELECT nombre, direccion
    FROM usuario;</pre>
<p>Un truco para que se muestren los resultados en vertical en lugar de en tablas, que puede ser útil, por ejemplo, si tenemos poco espacio horizontal, es terminar la consulta con <code>\G</code> en lugar de <code>;</code>: </p>
<pre name="code" class="sql">SELECT nombre, direccion
    FROM usuario\G</pre>
<p>Si queremos seleccionar todos los campos podemos usar el caracter <code>*</code> como atajo:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario;</pre>
<p>También podemos usar funciones en las expresiones que determinan lo que estamos seleccionando. En este caso se usa <code>LOWER</code>, que transforma una cadena en minúsculas:</p>
<pre name="code" class="sql">SELECT LOWER(nombre), LOWER(direccion)
    FROM usuario;</pre>
<p>Para seleccionar sólo las tuplas que cumplan una determinada condición:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario
    WHERE edad &lt; 18;</pre>
<p>Para agrupar las tuplas por un determinado campo:</p>
<pre name="code" class="sql">SELECT ciudad, COUNT(ciudad)
    FROM usuario
    GROUP BY ciudad;</pre>
<p>La salida de un <code>GROUP BY</code> está ordenada según los valores del campo sobre el que se agrupa. La ordenación se realiza por defecto en orden ascendente (<code>ASC</code>) para hacerlo en orden descendente se añade la palabra clave <code>DESC</code>:</p>
<pre name="code" class="sql">SELECT ciudad, COUNT(ciudad)
    FROM usuario
    GROUP BY ciudad DESC;</pre>
<p>Para seleccionar solo algunas tuplas de entre el resultado de un <code>GROUP BY</code> se puede utilizar la cláusula <code>HAVING</code>:</p>
<pre name="code" class="sql">SELECT ciudad, COUNT(ciudad)
    FROM usuario
    GROUP BY ciudad DESC
    HAVING COUNT(ciudad) &lt; 1;</pre>
<p>Para ordenar las tuplas según los valores de un campo:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario
    ORDER BY nombre;</pre>
<p>Como <code>GROUP BY</code>, se ordena de forma ascendente, a menos que se utilice la palabra clave <code>DESC</code>:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario
    ORDER BY nombre DESC;</pre>
<p>Para limitar el número de tuplas que queremos que devuelva <code>SELECT</code> se utiliza <code>LIMIT</code>:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario
    LIMIT 2;</pre>
<p>A <code>LIMIT</code> se le pueden pasar dos números separados por comas, en cuyo caso el primer número indica la tupla desde la que se empieza a contar (el índice comienza en 0, no en 1) y el segundo el número de tuplas a devolver. Esto puede ser útil, por ejemplo, para paginar los resultados:</p>
<pre name="code" class="sql">SELECT *
    FROM usuario
    LIMIT 2,2;</pre>
<p>Para crear una selección de tuplas combinadas de varias tablas se utiliza la sentencia <code>JOIN</code>. Un <code>JOIN</code>, sin nada más, no hace más que combinar todas las tuplas de la primera tabla con todas tuplas de la segunda tabla (esto es lo que se conoce como <code>CROSS JOIN</code> o combinación cruzada).</p>
<pre name="code" class="sql">SELECT *
    FROM usuario JOIN blog;</pre>
<p>Esto no suele ser muy útil. Suele ser más común el utilizar la cláusula <code>ON</code> para añadir una condición que especifique cuándo combinar las tablas (<code>WHERE</code> debería reservarse para condiciones que restrinjan las tuplas que queremos obtener). Esto es lo que se conoce como combinación interna o <code>INNER JOIN</code>.</p>
<p>En esta sentencia, por ejemplo, nos aprovechamos de que hay una relación entre las tablas usuario y blog implementada mediante una clave ajena. Las tuplas que no cumplen el <code>ON</code> para combinarse con ninguna otra tupla de la otra tabla, simplemente se ignoran.</p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario JOIN blog ON usuario.id_usuario = blog.id_usuario;</pre>
<p>Un <code>INNER JOIN</code> cuya expresión para la sentencia <code>ON</code> es una condición de igualdad, como el caso anterior, se conoce como <em>equi-join</em>.</p>
<p>El <code>NATURAL JOIN</code>, o combinación natural, es un tipo especializado de <em>equi-join</em> en el que no hace falta especificar la sentencia <code>ON</code>, sino que se combinan las tuplas para las que las columnas del mismo nombre de ambas tablas tengan el mismo valor. En la sentencia siguiente obtendríamos el mismo resultado que con la anterior, ya que estábamos comparando la columna <code>id_usuario</code> de <code>usuario</code> e <code>id_usuario</code> de <code>blog</code>, que como vemos tienen el mismo nombre. Al usar <code>NATURAL JOIN</code>, eso si, hay que tener mucho cuidado si renombramos las columnas de las tablas.</p>
<pre name="code" class="sql">SELECT  nombre, titulo
    FROM usuario NATURAL JOIN blog;</pre>
<p>Si queremos especificar qué campo o campos de igual nombre en ambas tablas queremos comparar, podemos usar <code>USING</code> en lugar de <code>NATURAL JOIN</code>.</p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario JOIN blog USING (id_usuario);</pre>
<p>Además de los <code>INNER JOIN</code> también tenemos otro tipo de <code>JOIN</code> llamado <code>OUTER JOIN</code> o combinación externa. Este puede ser de tres tipos: el <code>LEFT OUTER JOIN</code>, <code>LEFT JOIN</code> o combinación externa izquierda; el <code>RIGHT OUTER JOIN</code>, <code>RIGHT JOIN</code> o combinación externa derecha y el <code>FULL OUTER JOIN</code> o combinación externa completa.</p>
<p>Si usaramos un <code>LEFT JOIN</code>, a las tuplas del caso anterior se les sumaría un nuevo conjunto de tuplas que consistiría en las tuplas de la tabla izquierda (de ahí el <code>LEFT</code>) que no combinaban con ninguna tupla de la tabla derecha, teniendo estas nuevas tuplas valores <code>NULL</code> para las columnas de la tabla derecha. De esta forma nos aseguramos de que se mencionen todos los usuarios, aunque no tengan blog asociado:</p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario LEFT JOIN blog ON usuario.id_usuario = blog.id_usuario;</pre>
<p>Si usaramos un <code>RIGHT JOIN</code> ocurriría algo semejante con las tuplas de la tabla derecha, asegurándonos de que se mencionen todos los blogs, aunque no tengan un usuario asociado:</p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario RIGHT JOIN blog ON usuario.id_usuario = blog.id_usuario;</pre>
<p>Buena noticia para los que prefieren escribir poco: para los <code>OUTER JOIN</code> también podemos utilizar <code>NATURAL</code></p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario NATURAL LEFT JOIN blog;</pre>
<p>Mala noticia para los que conocían o han adivinado la utilidad de <code>FULL OUTER JOIN</code>. En efecto, esta operación añade tanto las tuplas de la tabla izquierda como las de la derecha que no tengan correspondencia con la otra tabla. Sin embargo no está implementada en MySQL, aunque podemos <a href="http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/">simularla con UNION ALL</a> (<code>UNION</code> se utiliza para combinar los resultados de varios <code>SELECT</code>; la palabra clave <code>ALL</code> tiene el efecto de que no se eliminen las tuplas duplicadas, como sería el caso del comportamiento de <code>UNION</code> por defecto).</p>
<pre name="code" class="sql">SELECT nombre, titulo
    FROM usuario LEFT JOIN blog ON usuario.id_usuario = blog.id_usuario
UNION
SELECT nombre, titulo
    FROM usuario RIGHT JOIN blog ON usuario.id_usuario = blog.id_usuario
    WHERE usuario.id_usuario IS NULL;</pre>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushSql.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh/flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2009/02/16/mysql/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Dreamhost: caché de consultas MySQL, registros AAAA (IPv6), WordPress 2.7</title>
		<link>http://mundogeek.net/archivos/2008/12/12/dreamhost-cache-de-consultas-mysql-registros-aaaa-ipv6-wordpress-27/</link>
		<comments>http://mundogeek.net/archivos/2008/12/12/dreamhost-cache-de-consultas-mysql-registros-aaaa-ipv6-wordpress-27/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 08:13:07 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=2195</guid>
		<description><![CDATA[Dreamhost es el hosting en el que se aloja Mundo geek orgullosamente desde hace 3 años. Estas son algunas de sus novedades este mes. MySQL Query Cache. Ya sabéis cómo funciona el tema de las cachés: tu web hace una consulta a la base de datos, esta le responde con un resultado. La próxima vez [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mundogeek.net/archivos/2007/12/12/alojamiento-con-500gb-de-espacio-y-5000gb-de-ancho-de-banda-por-4-euros-al-mes/">Dreamhost</a> es el hosting en el que se aloja <a href="http://mundogeek.net/" title="Mundo geek">Mundo geek</a> orgullosamente desde hace 3 años. Estas son algunas de sus novedades este mes.</p>
<ul>
<li>MySQL Query Cache. Ya sabéis cómo funciona el tema de las cachés: tu web hace una consulta a la base de datos, esta le responde con un resultado. La próxima vez que se use la misma consulta sobre los mismos datos, la base de datos devolverá el resultado de la caché en la que se almacenó la respuesta anterior en lugar de tener que procesar la misma consulta, mejorando sustancialmente el rendimiento.</li>
<li>Los registros AAAA se utilizan para representar direcciones IPv6. Con tantas máquinas interconectadas en el mundo nos estamos quedando sin direcciones IP con las que identificar a las máquinas. Aquí entra en juego IPv6, que será el sustituto del sistema actual (IPv4) y que, entre otros cambios y mejoras, aumenta el tamaño de las direcciones IP de 32 a 128 bits.</li>
<li>Gracias al &#8220;instalador en un clic&#8221; de Dreamhost ya es posible instalar y actualizar a WordPress 2.7 de la forma más sencilla</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/12/12/dreamhost-cache-de-consultas-mysql-registros-aaaa-ipv6-wordpress-27/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Sun compra MySQL</title>
		<link>http://mundogeek.net/archivos/2008/01/16/sun-compra-mysql/</link>
		<comments>http://mundogeek.net/archivos/2008/01/16/sun-compra-mysql/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 15:05:10 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[empresas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/01/16/sun-compra-mysql/</guid>
		<description><![CDATA[En Barrapunto y Menéame comentan la noticia del día: la compra de MySQL por parte de Sun, los creadores de Java (además de BEA por parte de Oracle). Lo considero un movimiento muy inteligente y estoy encantado con el apoyo que Sun está brindando al software libre últimamente (aunque sea por sus intereses, claro). Espero [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://barrapunto.com/article.pl?sid=08/01/16/1322208&#038;from=rss" title="Sun compra MySQL">En Barrapunto</a> y <a href="http://meneame.net/story/sun-microsystems-compra-mysql-ing" title="Sun compra MySQL">Menéame</a> comentan la noticia del día: la compra de MySQL por parte de Sun, los creadores de Java (además de BEA por parte de Oracle).</p>
<p>Lo considero un movimiento muy inteligente y estoy encantado con el apoyo que Sun está brindando al software libre últimamente (aunque sea por sus intereses, claro).</p>
<p>Espero que esto se traduzca en grandes beneficios para ambas empresas <img src='http://mundogeek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/01/16/sun-compra-mysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress 2.1</title>
		<link>http://mundogeek.net/archivos/2007/01/23/wordpress-21/</link>
		<comments>http://mundogeek.net/archivos/2007/01/23/wordpress-21/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 23:47:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/01/23/wordpress-21/</guid>
		<description><![CDATA[WordPress 2.1 ya está disponible para descargar. Los cambios, traducidos directamente desde el blog de desarrollo: El autoguardado asegura que no vuelvas a perder ninguna entrada. Nuestro nuevo editor te permite cambiar entre WYSIWYG y edición de código instantáneamente mientras escribes una entrada El sistema de importación y exportación a XML facilita mover contenido entre [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/" title="Wordpress 2.1">WordPress 2.1</a> ya está disponible para descargar. Los cambios, traducidos directamente desde el blog de desarrollo:</p>
<ul>
<li>El autoguardado asegura que no vuelvas a perder ninguna entrada.</li>
<li>Nuestro nuevo editor te permite cambiar entre WYSIWYG y edición de código instantáneamente mientras escribes una entrada</li>
<li>El sistema de importación y exportación a XML facilita mover contenido entre distintas bitácoras WordPress.</li>
<li>Nuestro editor visual ha sido reescrito desde cero e incluye además revisión ortográfica.</li>
<li>Nueva opción de privacidad para los motores de búsqueda que permite indicar que la bitácora no debería hacer ping o ser indexada por los motores de búsqueda como Google.</li>
<li>Puedes establecer cualquier página como página de inicio del sitio, y poner las últimas entradas en otro sitio distintos, haciendo mucho más sencillo usar WordPress como sistema de gestión de contenido.</li>
<li>Código de la base de datos mucho más eficiente, más rápido que las versiones anteriores. Domas Mituzas de MySQL revisó todas nuestras consultas.</li>
<li>Los enlaces en el blogroll soportan ahora sub categorías y puedes crear nuevas categorías al vuelo.</li>
<li>Página de login rediseñada desde el proyecto Shuttle.</li>
<li>Más AJAX para acelerar el trabajo con los campos personalizados, la moderación, borrado, y otras cosas. Mi preferida es la página de comentarios, que permite aprobar o desaprobar items instantáneamente.</li>
<li>Las páginas se pueden guardar ahora como borradores o privadas.</li>
<li>La administración se ha rediseñado para cargar más rápidamente y ser más consistente visualmente.</li>
<li>El tablón (dashboard) obtiene las entradas de los feeds de forma instantánea y asíncrona.</li>
<li>Los feeds de comentarios incluyen ahora todos los comentarios, no solo los 10 últimos.</li>
<li>Mejoras en la internacionalización y soporte de lenguajes con escritura de derecha a izquierda.</li>
<li>El gestor de subidas permite gestionar fácilmente todas las imágenes, vídeos y archivos de audio subidos.</li>
<li>Se incluye una nueva versión del plugin Akismet.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/01/23/wordpress-21/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>MySQL 4.0 o superior para WordPress 2.1</title>
		<link>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/</link>
		<comments>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 18:08:29 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linklog]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/</guid>
		<description><![CDATA[WordPress 2.1 necesitará una versión de MySQL 4.0 o superior. En principio la versión 2.2 necesitará de MySQL 4.1.]]></description>
			<content:encoded><![CDATA[<p><a href="http://boren.nu/archives/2007/01/15/wordpress-21-mysql-requirements/" title="WordPress 2.1 MySQL Requirements">WordPress 2.1 necesitará una versión de MySQL 4.0 o superior. En principio la versión 2.2 necesitará de MySQL 4.1.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Probando, probando</title>
		<link>http://mundogeek.net/archivos/2005/11/25/probando-probando/</link>
		<comments>http://mundogeek.net/archivos/2005/11/25/probando-probando/#comments</comments>
		<pubDate>Fri, 25 Nov 2005 14:03:59 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bbdd]]></category>
		<category><![CDATA[bitacora]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2005/11/25/probando-probando/</guid>
		<description><![CDATA[Esta entrada sirve para comprobar que todo funciona correctamente ahora que Mundo Geek se ha mudado de servidor. Lamento los comentarios perdidos en los últimos días pero como habreis visto he tenido que lidiar con un pequeño problema con el charset de la base de datos. Después de preguntar en varios foros (WordPress, MySQL, phpMyAdmin, [...]]]></description>
			<content:encoded><![CDATA[<p>Esta entrada sirve para comprobar que todo funciona correctamente ahora que Mundo Geek se ha mudado de servidor.</p>
<p>Lamento los comentarios perdidos en los últimos días pero como habreis visto he tenido que lidiar con un pequeño problema con el charset de la base de datos.</p>
<p>Después de preguntar en varios foros (WordPress, MySQL, phpMyAdmin, &#8230;) sin encontrar la cura, la solución ha venido de manos de <a href="http://utrac.sourceforge.net/index.html">UTRAC</a> (Universal Text Recognizer and Converter), un pequeño programa bajo GPL que permite auto detectar la codificación utilizada en un archivo y la conversión a cualquier otra codificación de caracteres. Recordadlo si alguna vez teneis algún problema de este tipo.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2005/11/25/probando-probando/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

