martes, abril 06, 2010

MySQL: forzar la creación de tablas InnoDB

Hola a todos,

es posible que en alguna ocasión al crear nuevas tablas en MySQL os encontréis con que por defecto las tablas se crean con el motor MyISAM, en lugar de InnoDB. Esto ocurre porque en la instalación del servidor se ha seleccionado MyISAM como motor por defecto.

La primera solución que se nos puede ocurrir es modificar la configuración de MySQL para que el motor por defecto sea InnoDB. Esto tiene sus inconvenientes, ya que en un entorno de producción modificar la configuración del servidor puede ser un problema.

Sin embargo, hay una solución muy simple y que evitará que nos peleemos con el administrador de turno. En la propia cadena de conexión de MySQL, podemos pasar parámetros adicionales que modifican la forma en que el servidor se comporta para dicha conexión. El detalle de estos parámetros se puede consultar aquí (es para la versión 5.5, pero existen para versiones anteriores):

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html

El parámetro que nos interesa se llama "sessionVariables". En este parámetro se puede pasar múltiples valores separados por coma que determinan el funcionamiento de la sesión de MySQL.

En concreto para forzar que el motor por defecto durante nuestra sesión sea InnoDB, deberíamos crear una conexión de este tipo:

"jdbc:mysql://hostname:3306/ddbbname?sessionVariables=storage_engine=InnoDB"

De esta manera, cualquier sentencia "CREATE TABLE" creará tablas InnoDB aunque el motor por defecto sea otro.

No hay comentarios: