# Diferencias entre MYSQL y SQLite

Aunque el lenguaje SQL está normalizado, existen diferencias entre los distintos sistemas gestores bases de datos, por lo que algunas consultas no dan los mismos resultados en cada una de ellas.

En las soluciones de los ejercicios incluidos en en estos apuntes se utiliza tanto MySQL como SQLite como sistemas gestores de bases de datos, por lo que se comentan aquí algunas de las diferencias entre ellas.

## Nombre de las bases de datos

En MySQL el nombre de la base de datos no puede contener guiones (-) ni puntos (.). En SQLite sí.

Volver al principio de la página

## Mayúsculas, minúsculas y acentos

Al comparar si dos cadenas son idénticas (WHERE campo=dato) o similiares (WHERE campo LIKE dato), MySQL no distingue entre mayúsculas y minúsculas o entre vocales acentuadas o sin acentuar, es decir, que si se busca "pepe", devolvería tanto la cadena "pepe", como "Pepe" o "pepé".

Al comparar si dos cadenas son idénticas, (WHERE campo=dato) SQLite sí que distingue entre mayúsculas y minúsculas o entre vocales acentuadas o sin acentuar, es decir, que si se busca "pepe", devolvería únicamente "pepe", no "Pepe" o "pepé".

Al comparar si dos cadenas son similares, (WHERE campo LIKE dato) SQLite no distingue entre mayúsculas y minúsculas aunque sí que lo hace entre vocales acentuadas o sin acentuar, es decir, que si se busca "pepe", devolvería únicamente "pepe" o "Pepe", pero no "pepé".

En las soluciones de los ejercicios incluidos en estos apuntes no se ha intentado corregir este problema, por lo que dependiendo de la base de datos utilizada, los programas funcionarán de distinta manera. Por ejemplo, si existe un registro "pepe", si la base de datos es MySQL no se podrá añadir un registro "Pepe", pero si es SQLite sí.

Volver al principio de la página

## Longitud de los campos

Si se guarda un dato más largo de la longitud del campo definida al crear la tabla, MySQL trunca la cadena, pero SQLite no. Por ejemplo, si se crea una tabla con un campo nombre VARCHAR (5) y se guarda la cadena abcdefghij, en MySQL se guardará la cadena abcde, mientras que en SQLite se guardará la cadena abcdefghij.

En las soluciones de los ejercicios incluidos en estos apuntes se ha intentado corregir este problema utilizando una función recorta() (a la que se llama en la función recogeParaConsulta()) que recorta las cadenas a la longitud definida.

Volver al principio de la página

## Fecha vacía

Al insertar una fecha vacía, SQLite guarda una cadena vacía, mientras que MySQL guarda la cadena "0000-00-00".

En las soluciones de los ejercicios incluidos en estos apuntes se ha intentado corregir este problema, guardando el valor "0000-00-00" cuando se quierre guardar una fecha no definida.

El siguiente ejemplo muestra la diferencia de comportamiento entre SQLite y MySQL (desgraciadamente, el servidor en el que se encuentran estos apuntes no permite trabajar con MySQL, aunque se puede descargar el código fuente del ejemplo en el apartado de soluciones de ejercicios y probarlo en su ordenador).

Enlace a ejemplo Comparación entre MySQL y SQLite - Fecha

Volver al principio de la página

Esta obra está bajo una licencia de Creative Commons.