Maison >base de données >tutoriel mysql >Une explication du mode strict de MySQL Mode strict
Trouver my.cnf dans le répertoire d'installation de mysql (pour les systèmes Windows, c'est my.ini) Dans le fichier
, ajouter STRICT_TRANS_TABLES à sql_mode signifie activer le mode strict. S'il n'est pas ajouté, cela signifie. mode non strict. Après modification, redémarrez mysql. Mais
Par exemple, cela signifie que le mode strict est activé :
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Ne prend pas en charge l'insertion de valeurs nulles dans des champs non nuls
Non Prise en charge de l'insertion de "valeur" pour les champs à croissance automatique
Ne prend pas en charge les champs de texte avec des valeurs par défaut
Créer un tableau de données pour faciliter les tests
<span style="color: rgb(0, 0, 0);">CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`)<br/>) ENGINE=InnoDB DEFAULT CHARSET=utf8;</span>
Insérer un enregistrement, la valeur du nom est nulle
Exécuter en mode non strict
<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(content) values('programmer');<br/>Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from mytable;<br/>+----+------+------------+| id | name | content |<br/>+----+------+------------+| 1 | | programmer |<br/>+----+------+------------+1 row in set (0.00 sec)</span>
L'exécution est réussie et la valeur de name est automatiquement convertie en "
Exécuter en mode strict
<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(content) values('programmer');ERROR 1364 (HY000): Field 'name' doesn't have a default value</span>
L'exécution a échoué, invite Le nom du champ ne peut pas être une valeur nulle
Insérez "valeur
Exécuter en mode non strict
<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');<br/>Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from mytable;<br/>+----+----------+------------+| id | name | content |<br/>+----+----------+------------+| 1 | fdipzone | programmer |<br/>+----+----------+------------+1 row in set (0.00 sec)</span>Exécuté avec succès
Exécuté en mode strict
<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');<br/>ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1</span>L'exécution a échoué, indiquant que l'identifiant du champ ne peut pas être "
<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(id,name,content) value(null,'fdipzone','programmer');<br/>Query OK, 1 row affected (0.00 sec)mysql> select * from mytable;<br/>+----+----------+------------+| id | name | content |<br/>+----+----------+------------+| 1 | fdipzone | programmer |<br/>+----+----------+------------+1 row in set (0.00 sec)</span>L'exécution est réussie si l'identifiant du champ est nul
3 . Test de la valeur par défaut du champ de texte
Créez une table de données mytable, dans laquelle le texte définit la valeur par défaut default="
Exécuter en mode non strict
<span style="color: rgb(0, 0, 0);">mysql> CREATE TABLE `mytable` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `name` varchar(20) NOT NULL, -> `content` text NOT NULL default '', -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected, 1 warning (0.03 sec)mysql> show tables;<br/>+------------------------------+| Tables_in_test_version |<br/>+------------------------------+| mytable |<br/>+------------------------------+</span>Exécuté avec succès
Exécuté en mode strict
<span style="color: rgb(0, 0, 0);">mysql> CREATE TABLE `mytable` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `name` varchar(20) NOT NULL, -> `content` text NOT NULL default '', -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br/>ERROR 1101 (42000): BLOB/TEXT column 'content' can't have a default value</span>l'exécution a échoué, indiquant que le champ de contenu est de type TEXTE et que la valeur par défaut ne peut pas être utilisée.
En résumé, l'utilisation du mode strict de MySQL peut rendre les données plus sécurisées et plus strictes, mais l'inconvénient est qu'il réduit la compatibilité des données vides dans la base de données. Il est recommandé que l'environnement de développement utilise le mode strict pour améliorer la qualité du code et la rigueur des données.
Cet article explique-t-il le mode strict de mysql Mode strict Pour plus de recommandations connexes, veuillez faire attention au site Web chinois de php ? Recommandations associées : Explication sur la méthode de données à deux colonnes dans la table d'échange MySQL Comment générer une méthode décimale aléatoire de 0 à 1 via PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!