Drei Tipps, die Ihnen zeigen, wie Sie die Zeichenfalle mit der Breite Null lösen und dafür sorgen, dass Ihre Datenbank nicht mehr „unheimlich“ wird.
Autor: Qin Fulang, Mitglied des DBA-Teams von Aikesheng, verantwortlich für die Bearbeitung täglicher Projektprobleme und die Fehlerbehebung bei Problemen mit der Unternehmensplattform. Ein Datenbankadministrator, der das Internet liebt, sich mit Fotografie auskennt und über Kochkenntnisse verfügt, ist kein guter Autofahrer, sagte er
Der von der Aikeson-Open-Source-Community erstellte Originalinhalt darf nicht ohne Genehmigung verwendet werden. Bitte wenden Sie sich an den Herausgeber und geben Sie die Quelle für den Nachdruck an.
Dieser Artikel umfasst etwa 1.000 Wörter und die Lektüre dauert voraussichtlich 3 Minuten.
Einführung
Bei der Verwendung von MySQL kann ein kleiner Charakter manchmal große Probleme verursachen. Bevor ich die Wahrheit herausfand, dachte ich, dass das Problem von einem Geist verursacht wurde Das Problem besteht darin, dass Zeichen mit der Breite Null wie ein in allen Bereichen der IT-Branche verborgener Geist sind. Heute werde ich einen wiederkehrenden Fall von „verschwindenden Tabellen“ in MySQL berichten.
Problembeschreibung
test
Eine benannte Tabelle wird auf irgendeine Weise in der Datenbank erstellt (z. B. über Befehlszeilen- oder Datenbankentwicklungstools usw.) lang
. Die Tabellenstruktur ist wie folgt:
CREATE TABLE `lang` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Mit SHOW TABLES;
dem Befehl können wir die Existenz dieser Tabelle bestätigen.
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a1 |
| lang |
| t1 |
| z1 |
+----------------+
4 rows in set (0.00 sec)
Wenn Sie jedoch versuchen, eine Abfrage oder ein Geschäftsprogramm auf dem MySQL-Client auszuführen, SELECT * FROM lang;
um eine Verbindung zur Tabelle herzustellen, erhalten Sie eine Fehlermeldung:
mysql> select * from lang;
ERROR 1146 (42S02): Table 'test.lang' doesn't exist
Die Uhr ist einfach wie von Zauberhand verschwunden.
Ursachenanalyse
Es ist, als würde man einen Geist sehen. Selbst wenn Sie die Abfragesyntax mehrmals manuell eingeben, können Sie diese Tabelle nicht abfragen. Wir kopieren die Anweisung zur Tabellenerstellung in das Texttool Sublime Text:
Zu diesem Zeitpunkt entdeckten wir das Problem: Auf den Tabellennamen folgte ein Zeichen „<0×200b>“. Dies ist ein Leerzeichen mit der Breite Null, also eine Art Zeichen mit der Breite Null.
Was sind Zeichen mit der Breite Null?
Ein Zeichen mit der Breite Null ist ein spezielles Unicode-Zeichen, das keinen sichtbaren Platz einnimmt und daher in den meisten Situationen unsichtbar ist. Sie können jedoch in Textform vorliegen und Auswirkungen auf Computerprogramme, einschließlich Datenbankverwaltungssystemen, haben. In Unicode steht U+200B für Leerzeichen mit der Breite Null und wird häufig dort verwendet, wo Zeilenumbrüche erforderlich sein könnten. Darüber hinaus gibt es weitere Zeichen mit der Breite Null, die hier nicht beschrieben werden.
Warum gibt es diesen geisterhaften Charakter? Das sogenannte Existenzmittel ist angemessen. Zeichen mit einer Breite von Null werden häufig in Szenarien wie Daten-Crawling, verschlüsselter Informationsübertragung und der Verhinderung des Scannens vertraulicher Wörter verwendet. Bei der Verwendung in einem Datenbanksystem kann es jedoch manchmal zu Problemen kommen, und das in diesem Artikel erwähnte ist eines davon. Obwohl diese Zeichen keinen Platz beanspruchen, können sie die korrekte Struktur des SQL-Befehls zerstören und bei späteren Verwendungen Fehler verursachen.
Wie löst man?
- Bevor Sie eine Tabelle erstellen, kopieren Sie die Anweisung zur Tabellenerstellung in mehrere Textbearbeitungstools und prüfen Sie, ob ungewöhnliche Symbolaufforderungen vorliegen (allgemeine Texttools können möglicherweise keine Zeichen mit der Breite Null anzeigen). Nach dem Ausprobieren von Tools oder Plug-Ins wie Sublime Text und Visual Studio Code gibt es auch einige Online-Webtools, die Unicode-Zeichen anzeigen können. Wenn Sie andere Tools kennen, die Zeichen mit der Breite Null anzeigen können, hinterlassen Sie bitte eine Nachricht im Kommentarbereich zum Teilen.
- Verwenden Sie nach dem Erstellen der Tabelle
SHOW CREATE TABLE;
den Befehl, um die Tabellenstruktur anzuzeigen, und kopieren Sie dann die Ausgabe in das obige Textbearbeitungstool, um zu überprüfen, ob ungewöhnliche Symbole vorhanden sind. - Nach vielen Tests wurde festgestellt, dass bei der Ausführung des Befehls auf dem MySQL-Client die Grenzlinie „|“
SHOW TABLES;
hinter dem Tabellennamen, die Leerzeichen mit der Breite Null enthielt, nicht an anderen Zeilen ausgerichtet war. Dies ermöglicht eine schnelle Erkennung problematischer Tabellen, zeigt jedoch keine bestimmten Zeichen an. Natürlich gilt diese Methode im Allgemeinen nicht für Entwicklungstools, Geschäftsprogramme usw. von Drittanbietern.
Zusammenfassen
Zeichen mit der Breite Null sind eine unsichtbare Falle, die bei der Verwendung von MySQL scheinbar unlösbare Probleme verursachen kann. Indem wir ihre Natur verstehen, SQL-Befehle noch einmal überprüfen, das Kopieren und Einfügen aus unzuverlässigen Quellen vermeiden, geeignete Tools verwenden und Best Practices befolgen, können wir sicherstellen, dass unsere Datenbank reibungslos läuft und keine ähnlichen Probleme auftreten.
Weitere technische Artikel finden Sie unter: https://opensource.actionsky.com/
Über SQLE
SQLE ist eine umfassende SQL-Qualitätsmanagementplattform, die die SQL-Prüfung und -Verwaltung von der Entwicklung bis zur Produktionsumgebung abdeckt. Es unterstützt gängige Open-Source-, kommerzielle und inländische Datenbanken, bietet Prozessautomatisierungsfunktionen für Entwicklung, Betrieb und Wartung, verbessert die Online-Effizienz und verbessert die Datenqualität.
SQLE erhalten
Typ | Adresse |
---|---|
Repository | https://github.com/actiontech/sqle |
dokumentieren | https://actiontech.github.io/sqle-docs/ |
Neuigkeiten veröffentlichen | https://github.com/actiontech/sqle/releases |
Entwicklungsdokumentation für das Datenaudit-Plug-in | https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse |