Alex Kochis, gerente sênior de produto do "Programa de Valor Agregado Genuíno do Windows" da Microsoft, escreveu em um blog que um erro humano levou ao erro. Alex disse que o novo software foi carregado acidentalmente no servidor que executa o WGA. funcionam normalmente e aplicativos razoáveis de usuários de software genuínos não podem ser processados corretamente. O banco de dados utilizado pelos clientes é MySQL, e os produtos desenvolvidos suportam Oracle. Para que os clientes paguem por isso, devemos mudar o ambiente de banco de dados de Oracle para MySQL. Encontramos os seguintes problemas durante o processo de conversão e esperamos fornecer alguma referência para colegas que encontraram o mesmo problema. Se prestarmos atenção à portabilidade do banco de dados durante o processo inicial de design e codificação, não há necessidade de nenhum trabalho adicional neste caso.
1. Problemas encontrados quando o ambiente do banco de dados muda de Oracle para MySQL.
Como a lógica permanece inalterada, o princípio não é alterar o código da aplicação, apenas o sql de criação/inicialização da tabela do banco de dados. Abaixo estão os problemas que encontramos e suas soluções.
1. Diferenças que diferenciam maiúsculas de minúsculas (se o sistema operacional do servidor for Linux).
O Oracle geralmente não diferencia maiúsculas de minúsculas. Às vezes, não prestamos atenção ao problema de maiúsculas e minúsculas ao usar o Oracle. Nomes de tabelas e nomes de campos não diferenciam maiúsculas de minúsculas sem aspas duplas. Assim: inserir em tableName e inserir em TABLENAME tem o mesmo efeito. inicialização de dados. Script, os resultados obtidos são geralmente convertidos em nomes de tabelas e nomes de campos em letras maiúsculas.
Mas no MySQL, a distinção entre maiúsculas e minúsculas do sistema operacional usado determina a distinção entre maiúsculas e minúsculas do nome do banco de dados e do nome da tabela. O banco de dados corresponde a um diretório no diretório de dados e cada tabela no banco de dados corresponde a pelo menos um arquivo no diretório do banco de dados (ou vários, dependendo do mecanismo de armazenamento). Portanto, usar um banco de dados ou tabela é, na verdade, manipular esses arquivos (pastas), de modo que a distinção entre maiúsculas e minúsculas do sistema operacional determina a distinção entre maiúsculas e minúsculas do nome do banco de dados e do nome da tabela. Faz distinção entre maiúsculas e minúsculas em sistemas operacionais com Linux como kernel.
A solução é manter o nome do banco de dados MySQL consistente com o caso do Oracle, e o nome da tabela consistente com o nome da tabela na string SQL do aplicativo. Se o nome do campo no aplicativo usar aspas duplas, altere o nome do campo. em SQL A caixa do nome deve ser consistente com os caracteres entre aspas duplas. Se os nomes das tabelas e campos referenciados pelo seu aplicativo não tiverem maiúsculas e minúsculas uniformes, você terá grandes problemas.
2. A diferença entre palavras reservadas.
Nomes de funções na linguagem SQL (como inteval, show) são palavras reservadas. Palavras reservadas no Oracle podem ser usadas como nomes de tabelas e nomes de campos e não afetam seu uso. No entanto, palavras reservadas no MySQL não podem ser usadas como nomes de tabelas e nomes de campos. Se usadas, um erro de sintaxe será relatado.
A solução é citar as palavras reservadas na instrução SQL com o símbolo '`', que está localizado acima da tecla tab do teclado, se for um nome de campo, existe outro método tablename.field name; Assim: insira em tablename (id, `interval`) value(….. ou insira em tablename (id, tablename.inteval) value(….. .
3. Diferenças nos tipos de dados.
No mysql, não há varchar2 e número como no oracle. O Mysql tem varchar e numérico correspondentes. Claro, não há tipo de tempo mysql no oracle.
A solução é a substituição.
4. A diferença entre os tipos de crescimento automático.
O Oracle possui sequência, mas o mysql não, mas possui o atributo auto_increment.
A solução é converter a sequência no Oracle para usar o atributo auto_increment. Em alguns casos, pode haver uma maneira de resolver o problema. Criar uma nova tabela independente para registrar dados de crescimento automático.
5. A diferença nos limites de comprimento do índice.
A partir do MySQL 4.1.2, o comprimento do índice das tabelas MyISAM e InnoDB suporta 1000 bytes, o que significa que o comprimento do campo de índice não pode exceder 1000 bytes. Se exceder, o seguinte erro será relatado: ERRO 1071 (42000): A chave especificada era muito longa; o comprimento máximo da chave é de 1.000 bytes. Se for codificação UTF-8, equivale a um comprimento de 333 caracteres (porque um caractere UTF8 ocupa 3 bytes). O limite de comprimento do índice do Oracle é muito mais flexível que o do MySQL.
Não há necessidade de elaborar a solução, seja alterar a definição do índice ou alterar o comprimento da definição do campo.
2. O que devemos prestar atenção para compatibilidade de banco de dados?
A compatibilidade do banco de dados deve ser um problema ao qual se deve prestar atenção no design do banco de dados, pois às vezes os clientes possuem bancos de dados que já estão em uso e não desejam manter dois bancos de dados ao mesmo tempo. Nesse caso, a compatibilidade com vários bancos de dados também pode se tornar. um ponto de venda do produto.
A chave para alcançar a compatibilidade do banco de dados é aderir ao uso padrão.
1. Siga o uso padrão e tente não usar determinados usos específicos do banco de dados.
Tal como o uso do símbolo '''' do msyql,
Para outro exemplo, muitas pessoas têm esse uso. Ao usar o Oracle para criar uma sequência, SELECT seq.nextval FROM DUAL antes de inserir dados na tabela e, em seguida, insira o valor obtido da consulta na tabela como valor. não funciona. Não é adequado para bancos de dados sem sequência. Cada banco de dados tem uso de crescimento automático. Se precisar usá-lo, você deve usá-lo completamente.
Para outro exemplo, diferentes bancos de dados expandiram as consultas de paginação. O Postgresql possui deslocamento e limite, mas o Oracle não.
2. Evite problemas de diferenciação de maiúsculas e minúsculas no banco de dados.
Escolha se os nomes das tabelas e dos campos do banco de dados devem estar em letras maiúsculas ou minúsculas e ser completamente unificados durante o design e a codificação do banco de dados.
3. Palavras reservadas.
Os designers de banco de dados são obrigados a tentar não usar palavras reservadas para nomes de tabelas e nomes de campos. Também existem muitas pessoas que usam esse método, adicionando '_' antes do nome da tabela e do nome do campo, assim: create table _tablename (_id inteiro). Desta forma você nunca terá problemas causados por palavras reservadas.