Alex Kochis, leitender Produktmanager für das „Windows Genuine Value Added Program“, schrieb in einem Blog, dass menschliches Versagen zu dem Fehler geführt habe. Alex sagte, dass die neue Software versehentlich auf den Server geladen wurde, auf dem WGA ausgeführt wird normal funktionieren und vernünftige Anträge von echten Softwarebenutzern können nicht korrekt verarbeitet werden. Die von den Kunden verwendete Datenbank ist MySQL und die entwickelten Produkte unterstützen Oracle. Damit Kunden dafür bezahlen können, müssen wir die Datenbankumgebung von Oracle auf MySQL umstellen. Während des Konvertierungsprozesses sind die folgenden Probleme aufgetreten, und wir hoffen, Kollegen, die auf das gleiche Problem gestoßen sind, einige Hinweise geben zu können. Wenn wir beim anfänglichen Entwurfs- und Codierungsprozess auf die Portabilität der Datenbank achten, ist in diesem Fall kein zusätzlicher Aufwand erforderlich.
1. Probleme beim Wechsel der Datenbankumgebung von Oracle auf MySQL.
Da die Logik unverändert bleibt, besteht das Prinzip nicht darin, den Anwendungscode zu ändern, sondern nur die SQL-Erstellung/Initialisierung der Datenbanktabelle. Nachfolgend finden Sie die Probleme, auf die wir gestoßen sind, und ihre Lösungen.
1. Unterschiede zwischen Groß- und Kleinschreibung (wenn das Server-Betriebssystem Linux ist).
Oracle unterscheidet im Allgemeinen nicht zwischen Groß- und Kleinschreibung. Manchmal achten wir bei der Verwendung von Oracle nicht auf die Groß-/Kleinschreibung. Beispiel: Einfügen in Tabellenname und Einfügen in Tabellenname haben den gleichen Effekt. Bei der Dateninitialisierung werden die erhaltenen Ergebnisse im Allgemeinen in Tabellennamen und Feldnamen in Großbuchstaben umgewandelt.
In MySQL bestimmt jedoch die Groß-/Kleinschreibung des verwendeten Betriebssystems die Groß-/Kleinschreibung des Datenbanknamens und des Tabellennamens. Die Datenbank entspricht einem Verzeichnis im Datenverzeichnis, und jede Tabelle in der Datenbank entspricht mindestens einer Datei im Datenbankverzeichnis (oder mehreren, je nach Speicher-Engine). Daher bedeutet die Verwendung einer Datenbank oder Tabelle tatsächlich eine Manipulation dieser Dateien (Ordner), sodass die Groß-/Kleinschreibung des Betriebssystems die Groß-/Kleinschreibung des Datenbanknamens und des Tabellennamens bestimmt. Bei Betriebssystemen mit Linux als Kernel wird die Groß-/Kleinschreibung beachtet.
Die Lösung besteht darin, den Datenbanknamen von MySQL mit der Groß- und Kleinschreibung von Oracle und den Tabellennamen mit dem Tabellennamen in der SQL-Zeichenfolge in der Anwendung konsistent zu halten. Wenn der Feldname in der Anwendung doppelte Anführungszeichen verwendet, ändern Sie bitte den Feldnamen in SQL Die Groß-/Kleinschreibung des Namens muss mit den in doppelte Anführungszeichen eingeschlossenen Zeichen übereinstimmen. Wenn die Tabellennamen und Felder, auf die Ihre Anwendung verweist, keine einheitliche Groß- und Kleinschreibung haben, geraten Sie in große Schwierigkeiten.
2. Der Unterschied zwischen reservierten Wörtern.
Funktionsnamen in der SQL-Sprache (z. B. inteval, show) sind reservierte Wörter. Reservierte Wörter in Oracle können als Tabellennamen und Feldnamen verwendet werden und haben keinen Einfluss auf deren Verwendung. Reservierte Wörter in MySQL können jedoch nicht als Tabellennamen und Feldnamen verwendet werden.
Die Lösung besteht darin, die reservierten Wörter in der SQL-Anweisung mit dem Symbol „`“ zu zitieren, das sich über der Tabulatortaste der Tastatur befindet. Wenn es sich um einen Feldnamen handelt, gibt es eine andere Methode tabellenname.feldname. So: in Tabellennamen (ID, „Intervall“) Wert(….. einfügen) oder in Tabellennamen (ID, Tabellenname.inteval) Wert(…..) einfügen.
3. Unterschiede in den Datentypen.
In MySQL gibt es kein Varchar2 und keine Zahl wie in Oracle. Natürlich gibt es in Oracle keinen MySQL-Zeittyp.
Die Lösung ist Ersatz.
4. Der Unterschied zwischen automatischen Wachstumstypen.
Oracle verfügt über eine Sequenz, MySQL jedoch nicht, aber über das Attribut auto_increment.
Die Lösung besteht darin, die Sequenz in Oracle zu konvertieren, um das Attribut auto_increment zu verwenden. In einigen Fällen gibt es möglicherweise eine Möglichkeit, das Problem zu lösen. Erstellen Sie eine neue unabhängige Tabelle, um automatische Wachstumsdaten aufzuzeichnen.
5. Der Unterschied in den Indexlängengrenzen.
Ab MySQL 4.1.2 unterstützt die Indexlänge von MyISAM- und InnoDB-Tabellen 1000 Bytes, was bedeutet, dass die Länge des Indexfelds 1000 Bytes nicht überschreiten darf. Bei Überschreitung wird der folgende Fehler gemeldet: ERROR 1071 (42000): Der angegebene Schlüssel war zu lang. Die maximale Schlüssellänge beträgt 1000 Byte. Wenn es sich um eine UTF-8-Kodierung handelt, entspricht dies einer Länge von 333 Zeichen (da ein UTF8-Zeichen 3 Bytes belegt). Die Indexlängenbeschränkung von Oracle ist viel lockerer als die von MySQL.
Es besteht keine Notwendigkeit, die Lösung näher zu erläutern, weder die Definition des Index noch die Definitionslänge des Feldes zu ändern.
2. Worauf sollten wir bei der Datenbankkompatibilität achten?
Datenbankkompatibilität sollte ein Thema sein, auf das beim Datenbankdesign geachtet werden sollte, da Kunden manchmal Datenbanken haben, die bereits verwendet werden, und nicht zwei Datenbanken gleichzeitig pflegen möchten. In diesem Fall kann auch die Kompatibilität mit mehreren Datenbanken beeinträchtigt werden ein Verkaufsargument des Produkts.
Der Schlüssel zum Erreichen der Datenbankkompatibilität liegt in der Einhaltung der Standardnutzung.
1. Befolgen Sie die Standardverwendung und versuchen Sie, bestimmte datenbankspezifische Verwendungen nicht zu verwenden.
Wie zum Beispiel die Verwendung des „“-Symbols von msyql,
Ein weiteres Beispiel: Wenn Sie Oracle zum Erstellen einer Sequenz verwenden, verwenden Sie SELECT seq.nextval FROM DUAL; Funktioniert nicht. Es ist nicht für Datenbanken ohne Sequenz geeignet. Wenn Sie es verwenden müssen, sollten Sie es vollständig verwenden.
Ein weiteres Beispiel: Verschiedene Datenbanken verfügen über erweiterte Paging-Abfragen. Postgresql verfügt über Offset und Limit, Oracle jedoch nicht.
2. Vermeiden Sie Probleme mit der Groß- und Kleinschreibung der Datenbank.
Wählen Sie, ob Datenbanktabellennamen und Feldnamen in Groß- oder Kleinbuchstaben geschrieben und beim Entwurf und der Codierung der Datenbank vollständig vereinheitlicht werden sollen.
3. Reservierte Wörter.
Datenbankdesigner müssen versuchen, keine reservierten Wörter für Tabellennamen und Feldnamen zu verwenden. Es gibt auch viele Leute, die diese Methode verwenden und vor dem Tabellennamen und dem Feldnamen „_“ hinzufügen, etwa so: Tabelle _tablename (_id integer) erstellen. Auf diese Weise haben Sie nie Probleme, die durch reservierte Wörter verursacht werden.