Alex Kochis, gerente senior de productos del "Programa de valor agregado original de Windows", escribió en un blog que un error humano provocó el error. Alex dijo que el nuevo software se cargó accidentalmente en el servidor que ejecuta WGA. Como resultado, el servidor no puede. funcionan normalmente y las aplicaciones razonables de usuarios de software originales no pueden procesarse correctamente. La base de datos utilizada por los clientes es MySQL y los productos desarrollados son compatibles con Oracle para que los clientes paguen por ella, debemos cambiar el entorno de la base de datos de Oracle a MySQL. Encontramos los siguientes problemas durante el proceso de conversión y esperamos brindar alguna referencia a los colegas que hayan encontrado el mismo problema. Si prestamos atención a la portabilidad de la base de datos durante el proceso inicial de diseño y codificación, no hay necesidad de realizar ningún trabajo adicional en este caso.
1. Problemas encontrados cuando el entorno de la base de datos cambia de Oracle a MySQL.
Debido a que la lógica permanece sin cambios, el principio es no cambiar el código de la aplicación, solo el SQL de creación/inicialización de la tabla de la base de datos. A continuación se detallan los problemas que encontramos y sus soluciones.
1. Diferencias que distinguen entre mayúsculas y minúsculas (si el sistema operativo del servidor es Linux).
Oracle generalmente no distingue entre mayúsculas y minúsculas. A veces no prestamos atención al problema de las mayúsculas y minúsculas cuando usamos Oracle. Los nombres de las tablas y los nombres de los campos no distinguen entre mayúsculas y minúsculas sin comillas dobles. Así: insertar en nombre de tabla e insertar en NOMBRE DE TABLA tiene el mismo efecto. inicialización de datos. Script, los resultados obtenidos generalmente se convierten a nombres de tablas y nombres de campos en mayúsculas.
Pero en MySQL, la distinción entre mayúsculas y minúsculas del sistema operativo utilizado determina la distinción entre mayúsculas y minúsculas del nombre de la base de datos y el nombre de la tabla. La base de datos corresponde a un directorio en el directorio de datos, y cada tabla de la base de datos corresponde al menos a un archivo en el directorio de la base de datos (o varios, según el motor de almacenamiento). Por lo tanto, usar una base de datos o una tabla en realidad es manipular estos archivos (carpetas), por lo que la distinción entre mayúsculas y minúsculas del sistema operativo determina la distinción entre mayúsculas y minúsculas del nombre de la base de datos y el nombre de la tabla. Distingue entre mayúsculas y minúsculas en sistemas operativos con Linux como núcleo.
La solución es mantener el nombre de la base de datos de MySQL coherente con el caso de Oracle y el nombre de la tabla coherente con el nombre de la tabla en la cadena SQL de la aplicación. Si el nombre del campo en la aplicación utiliza comillas dobles, cambie el nombre del campo. en SQL El caso del nombre debe ser coherente con los caracteres entre comillas dobles. Si los nombres de las tablas y los campos a los que hace referencia su aplicación no tienen mayúsculas y minúsculas uniformes, estará en un gran problema.
2. La diferencia entre palabras reservadas.
Los nombres de funciones en lenguaje SQL (como intervalo, mostrar) son palabras reservadas. Las palabras reservadas en Oracle se pueden usar como nombres de tablas y nombres de campos, y no afectan su uso. Sin embargo, las palabras reservadas en MySQL no se pueden usar como nombres de tablas y nombres de campos. Si se usan, se informará un error de sintaxis.
La solución es citar las palabras reservadas en la declaración SQL con el símbolo '`', que se encuentra encima de la tecla tab del teclado; si es un nombre de campo, existe otro método nombretabla.nombrecampo. De esta manera: insertar en nombre de tabla (id, `intervalo`) valor (… .. o insertar en nombre de tabla (id, nombre de tabla.inteval) valor (… .. .
3. Diferencias en tipos de datos.
En MySQL, no hay varchar2 ni números como en Oracle. MySQL tiene varchar y numéricos correspondientes. Por supuesto, no hay ningún tipo de hora de MySQL en Oracle.
La solución es el reemplazo.
4. La diferencia entre los tipos de crecimiento automático.
Oracle tiene secuencia, pero mysql no, pero tiene el atributo auto_increment.
La solución es convertir la secuencia en Oracle para usar el atributo auto_increment. En algunos casos, puede haber una manera de resolver el problema. Cree una nueva tabla independiente para registrar datos de crecimiento automático.
5. La diferencia en los límites de longitud del índice.
A partir de MySQL 4.1.2, la longitud del índice de las tablas MyISAM e InnoDB admite 1000 bytes, lo que significa que la longitud del campo de índice no puede exceder los 1000 bytes. Si excede, se informará el siguiente error: ERROR 1071 (42000): La clave especificada era demasiado larga; la longitud máxima de la clave es 1000 bytes. Si tiene codificación UTF-8, equivale a una longitud de 333 caracteres (porque un carácter UTF8 ocupa 3 bytes). El límite de longitud del índice de Oracle es mucho más flexible que el de MySQL.
No es necesario dar más detalles sobre la solución, ya sea cambiar la definición del índice o cambiar la longitud de la definición del campo.
2. ¿A qué debemos prestar atención para la compatibilidad de la base de datos?
La compatibilidad de la base de datos debe ser un tema al que se debe prestar atención en el diseño de la base de datos, porque a veces los clientes tienen bases de datos que ya están en uso y no quieren mantener dos bases de datos al mismo tiempo. En este caso, la compatibilidad con varias bases de datos también puede volverse. un punto de venta del producto.
La clave para lograr la compatibilidad de la base de datos es cumplir con el uso estándar.
1. Siga el uso estándar e intente no utilizar ciertos usos específicos de la base de datos.
Como el uso del símbolo '`' de msyql,
Para otro ejemplo, muchas personas tienen este uso. Cuando usan Oracle para crear una secuencia, SELECCIONE seq.nextval FROM DUAL antes de insertar datos en la tabla y luego inserte el valor obtenido de la consulta en la tabla como valor. no funciona. No es adecuado para bases de datos sin secuencia. Cada base de datos tiene un uso de crecimiento automático. Si necesita usarla, debe usarla por completo.
Para otro ejemplo, diferentes bases de datos tienen consultas de paginación expandidas. Postgresql tiene compensación y límite, pero Oracle no.
2. Evite problemas de distinción entre mayúsculas y minúsculas en la base de datos.
Elija si los nombres de las tablas de la base de datos y los nombres de los campos deben estar en mayúsculas o minúsculas, y estar completamente unificados durante el diseño y codificación de la base de datos.
3. Palabras reservadas.
Los diseñadores de bases de datos deben intentar no utilizar palabras reservadas para nombres de tablas y campos. También hay muchas personas que usan este método, agregando '_' antes del nombre de la tabla y el nombre del campo, así: crear tabla _tablename (_id entero). De esta manera nunca tendrás problemas causados por palabras reservadas.