[Einleitung] 1 Einleitung Die Auswahl des Zeichensatzes beim Sichern von MySQL ist ein schwieriges Problem, insbesondere für Unternehmen mit variablen Zeichensätzen. Mysqldump verwendet standardmäßig utf8, und utf8 wird auch offiziell empfohlen. Tatsächlich verfügt jedoch für Chinesisch eine beträchtliche Anzahl von GBK-codierten Zeichen nicht über entsprechende Unicode-Codierungen, was bedeutet, dass dieser Teil des Zeichensatzes
Auswählen des Zeichensatzes beim Sichern nach oben MySQL ist ein schwieriges Problem, insbesondere für Unternehmen mit variablen Zeichensätzen. Mysqldump verwendet standardmäßig utf8, und utf8 wird auch offiziell empfohlen. Tatsächlich verfügt jedoch für Chinesisch ein erheblicher Teil der GBK-codierten Zeichen nicht über die entsprechende Unicode-Codierung, was bedeutet, dass die Verwendung der UTF8-Sicherung für diesen Teil des Zeichensatzes zu Datenverlust führt. Gibt es also eine Lösung?
Der direkteste Weg besteht natürlich darin, die Zuordnung dieses Teils der Codierung hinzuzufügen. Die Anzahl dieses Teils des Zeichensatzes ist jedoch nicht gering, und noch ärgerlicher ist, dass es für diesen Teil des Zeichensatzes anscheinend keinen verbindlichen Zuordnungsstandard gibt. Gibt es also eine andere Möglichkeit?
Wenn Sie für die Sicherung Binärdateien verwenden, findet tatsächlich kein Zeichensatzkonvertierungsprozess statt und die oben genannten Probleme treten nicht auf. Löst die Verwendung von Binärdateien also alle Probleme von GBK? Die Antwort ist NEIN.
Bevor wir über binäre Probleme sprechen. Es gibt 2 Fragen, die geklärt werden müssen. Die MySQL-Sicherung ist in zwei Teile unterteilt: Schemainformationen und tatsächliche Daten. Schemainformationen werden mit Ausnahme des Standardwerts immer in utf8 codiert. Hier liegt das Problem.
2.1 utf8-Sicherung
(1) Die Datei .frm speichert die Schemainformationen der Tabelle und speichert den Standardwert jedes Felds über einen tatsächlichen Datensatz. Die dem Schema entsprechenden Informationen (einschließlich Kommentar) werden mit utf8 gespeichert, der Standardwert wird jedoch mit dem in der Tabelle angegebenen Zeichensatz gespeichert.
(2) Beim Ausführen der Anweisung „show create table“ konvertiert mysqld den Standardwert in frm von der in der Tabelle angegebenen Kodierung in die utf8-Kodierung.
(3) Wenn mysqld die Anweisung zum Erstellen einer Tabelle ausführt, wird der Standardwert von utf8 in den in der Tabelle angegebenen Zeichensatz konvertiert.
2.2 Binärsicherung
Wenn Binärdatei für die Sicherung angegeben ist. Beim Import vor dem Erstellen der Tabelle ist collation_connection immer noch binär, obwohl „character_set_client“ als utf8 angegeben ist. Daher wird die Konvertierung von utf8 in den in der Tabelle angegebenen Zeichensatz beim Speichern des Standardwerts nicht durchgeführt. Wenn die Tabelle als GBK-Kodierung angegeben ist, schlägt der Import unweigerlich fehl.
Beispiel:
`iNetbarId ` int(11) NOT NULL DEFAULT '0', `iUin` bigint(20) NOT NULL DEFAULT '0', `vNetbarName` varchar(80) NOT NULL DEFAULT '" -"',PRIMÄRSCHLÜSSEL (`iNetbarId`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk; in t1-Werte einfügen(1 ,1,'xxxx'); |
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum Thema MySQL-Backup-Zeichensatz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!