La table MySQL disparaît mystérieusement après sa création ? Découvrir le piège des caractères de largeur nulle

Trois conseils pour vous apprendre à résoudre le piège des caractères de largeur nulle et à rendre votre base de données plus « hantée ».

Auteur : Qin Fulang, membre de l'équipe DBA d'Aikesheng, responsable de la gestion des problèmes quotidiens du projet et du dépannage des problèmes de la plate-forme de l'entreprise. Un DBA qui aime Internet, connaît la photographie et connaît les compétences culinaires n'est pas un bon conducteur, didi~

Produit par la communauté open source Aikeson, le contenu original ne peut être utilisé sans autorisation. Veuillez contacter l'éditeur et indiquer la source de réimpression.

Cet article compte environ 1 000 mots et devrait prendre 3 minutes à lire.

introduction

Dans le processus d'utilisation de MySQL, parfois un petit personnage peut causer de gros problèmes. Avant de découvrir la vérité, je pensais que le problème était causé par un fantôme. Mais quand j'ai découvert la vérité, je ne m'attendais pas à ce qu'il soit causé par un seul. Le problème est que les caractères de largeur nulle sont comme un fantôme caché dans tous les aspects de l'industrie informatique. Aujourd'hui, je vais partager un cas récurrent de "tables disparues" dans MySQL.

Description du problème

testUne table nommée est créée dans la base de données par certains moyens (tels qu'une ligne de commande ou des outils de développement de base de données, etc.) lang. La structure du tableau est la suivante :

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;

Grâce à SHOW TABLES;la commande, nous pouvons confirmer l'existence de cette table.

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a1             |
| lang​          |
| t1             |
| z1             |
+----------------+
4 rows in set (0.00 sec)

Cependant, lorsque vous essayez d'exécuter une requête ou un programme métier sur le client MySQL SELECT * FROM lang;pour vous connecter à la table, vous recevez un message d'erreur :

mysql> select * from lang;
ERROR 1146 (42S02): Table 'test.lang' doesn't exist

La montre a disparu comme par magie.

Analyse des causes

C'est comme voir un fantôme Même si vous saisissez manuellement la syntaxe de requête plusieurs fois, vous ne pouvez pas interroger cette table. Nous copions l'instruction de création de tableau dans l'outil texte Sublime Text :

C'est à ce moment-là que nous avons découvert le problème : le nom de la table était suivi d'un caractère "<0×200b>". Il s'agit d'un espace de largeur nulle, qui est un type de caractère de largeur nulle.

Que sont les caractères de largeur nulle ?

Un caractère de largeur nulle est un caractère Unicode spécial qui n'occupe aucun espace visible et est donc invisible dans la plupart des situations. Cependant, ils peuvent exister sous forme de texte et avoir un impact sur les programmes informatiques, notamment les systèmes de gestion de bases de données. En Unicode, U+200B signifie espace de largeur nulle et est souvent utilisé là où des sauts de ligne peuvent être nécessaires. De plus, il existe d'autres caractères de largeur nulle, qui ne seront pas décrits ici.

Alors pourquoi ce personnage fantomatique existe-t-il ? Les soi-disant moyens d'existence raisonnables. Les caractères de largeur nulle sont souvent utilisés dans des scénarios tels que l'anti-exploration de données, la transmission d'informations cryptées et la prévention de l'analyse de mots sensibles. Mais lorsqu’il est utilisé dans un système de base de données, il y aura parfois des maux de tête, et celui mentionné dans cet article en fait partie. Bien que ces caractères n'occupent pas d'espace, ils peuvent détruire la structure correcte de la commande SQL et provoquer des erreurs lors des utilisations ultérieures.

Comment résoudre?

  1. Avant de créer un tableau, copiez l'instruction de création de tableau dans plusieurs outils d'édition de texte et vérifiez s'il existe des invites de symboles anormales (les outils de texte généraux peuvent ne pas être en mesure d'afficher des caractères de largeur nulle). Après avoir essayé des outils ou des plug-ins tels que Sublime Text et Visual Studio Code, ils ont pour fonction de rappeler les caractères de largeur nulle ; il existe également des outils Web en ligne qui permettent d'afficher les caractères Unicode ; Si vous connaissez d'autres outils capables d'afficher des caractères de largeur nulle, veuillez laisser un message dans la zone de commentaires pour les partager.
  2. Après avoir créé le tableau, utilisez SHOW CREATE TABLE;la commande pour afficher la structure du tableau, puis copiez la sortie dans l'outil d'édition de texte ci-dessus pour vérifier s'il existe des symboles anormaux.
  3. Après de nombreux tests, il a été constaté que lorsque la commande était exécutée sur le client MySQL , la ligne de bordure "|"SHOW TABLES; derrière le nom de la table contenant des espaces de largeur nulle n'était pas alignée avec les autres lignes. Cela permet une découverte rapide des tables problématiques, mais n'affiche pas de caractères spécifiques. Bien entendu, cette méthode ne s’applique généralement pas aux outils de développement tiers, aux programmes commerciaux, etc.

Résumer

Les caractères de largeur nulle sont un piège invisible qui peut causer des problèmes apparemment insolubles lors de l'utilisation de MySQL. En comprenant leur nature, en revérifiant les commandes SQL, en évitant les copier-coller à partir de sources peu fiables, en utilisant les outils appropriés et en suivant les meilleures pratiques, nous pouvons garantir que notre base de données fonctionne correctement et qu'aucun problème similaire ne survienne.

Pour des articles plus techniques, veuillez visiter : https://opensource.actionsky.com/

À propos de SQLE

SQLE est une plateforme complète de gestion de la qualité SQL qui couvre l'audit et la gestion SQL, du développement aux environnements de production. Il prend en charge les bases de données open source, commerciales et nationales grand public, fournit des capacités d'automatisation des processus pour le développement, l'exploitation et la maintenance, améliore l'efficacité en ligne et améliore la qualité des données.

SQLE obtenir

taper adresse
Dépôt https://github.com/actiontech/sqle
document https://actiontech.github.io/sqle-docs/
publier des nouvelles https://github.com/actiontech/sqle/releases
Documentation de développement du plug-in d'audit des données https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
Linus a pris sur lui d'empêcher les développeurs du noyau de remplacer les tabulations par des espaces. Son père est l'un des rares dirigeants capables d'écrire du code, son deuxième fils est directeur du département de technologie open source et son plus jeune fils est un noyau open source. contributeur. Robin Li : Le langage naturel deviendra un nouveau langage de programmation universel. Le modèle open source prendra de plus en plus de retard sur Huawei : il faudra 1 an pour migrer complètement 5 000 applications mobiles couramment utilisées vers Java, qui est le langage le plus enclin . vulnérabilités tierces. L'éditeur de texte riche Quill 2.0 a été publié avec des fonctionnalités, une fiabilité et des développeurs. L'expérience a été grandement améliorée. Bien que l'ouverture soit terminée, Meta Llama 3 a été officiellement publié. la source de Laoxiangji n'est pas le code, les raisons derrière cela sont très réconfortantes. Google a annoncé une restructuration à grande échelle.
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/actiontechoss/blog/11053596
conseillé
Classement