Maison  >  Article  >  base de données  >  Une explication du mode strict de MySQL Mode strict

Une explication du mode strict de MySQL Mode strict

jacklove
jackloveoriginal
2018-06-09 09:47:442219parcourir

1. Comment activer et désactiver le 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

2. Description de la fonction du mode strict

  • 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

3. Exemple :

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>

1. Le champ non nul insère un test de valeur nulle

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(&#39;programmer&#39;);<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(&#39;programmer&#39;);ERROR 1364 (HY000): Field &#39;name&#39; doesn&#39;t have a default value</span>

L'exécution a échoué, invite Le nom du champ ne peut pas être une valeur nulle

2 . Insérez "test de valeur pour le champ à croissance automatique"

Insérez "valeur

Exécuter en mode non strict

<span style="color: rgb(0, 0, 0);">mysql> insert into mytable(id,name,content) value(&#39;&#39;,&#39;fdipzone&#39;,&#39;programmer&#39;);<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(&#39;&#39;,&#39;fdipzone&#39;,&#39;programmer&#39;);<br/>ERROR 1366 (HY000): Incorrect integer value: &#39;&#39; for column &#39;id&#39; 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,&#39;fdipzone&#39;,&#39;programmer&#39;);<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 &#39;&#39;,    ->  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 &#39;&#39;,    ->  PRIMARY KEY (`id`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br/>ERROR 1101 (42000): BLOB/TEXT column &#39;content&#39; can&#39;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 des problèmes que les novices négligent facilement lors de l'utilisation d'exploser pour diviser des chaînes en PHP

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn