Maison > base de données > tutoriel mysql > Comment utiliser le mode strict de MySQL

Comment utiliser le mode strict de MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-05-26 15:10:15
avant
2504 Les gens l'ont consulté

    1. Comment activer et désactiver le mode strict

    Trouvez le fichier my.cnf (my.ini pour le système Windows) dans le répertoire d'installation de MySQL

    Ajoutez STRICT_TRANS_TABLES à sql_mode pour activer le mode strict, sinon ajouté Cela signifie le mode non strict, redémarrez simplement MySQL après la modification

    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. champs non nuls L'insertion de valeurs nulles

    • ne prend pas en charge l'insertion de "valeurs" dans des champs auto-croissants

    • ne prend pas en charge les champs de texte avec des valeurs par défaut

    Exemple :

    Créer un. table de données pour tester

    CREATE TABLE `mytable` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `name` varchar(20) NOT NULL,
     `content` text NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Copier après la connexion

    1.champ non nul Insérer une valeur nulle test

    Insérer un enregistrement, la valeur du nom est nulle

    Exécuter en mode non strict

    mysql> insert into mytable(content) values('programmer');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> select * from mytable;
    +----+------+------------+
    | id | name | content    |
    +----+------+------------+
    |  1 |      | programmer |
    +----+------+------------+
    1 row in set (0.00 sec)
    Copier après la connexion

    L'exécution est réussie, la valeur de le nom est automatiquement converti en "

    Exécuter en mode strict

    mysql> insert into mytable(content) values('programmer');
    ERROR 1364 (HY000): Field 'name' doesn't have a default value
    Copier après la connexion

    Échec de l'exécution, indiquant que le nom du champ ne peut pas être une valeur nulle

    2. Insérez la valeur "test de valeur pour le champ à incrémentation automatique

    Insérer" pour le champ id

    Exécuté en mode non strict

    mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> select * from mytable;
    +----+----------+------------+
    | id | name     | content    |
    +----+----------+------------+
    |  1 | fdipzone | programmer |
    +----+----------+------------+
    1 row in set (0.00 sec)
    Copier après la connexion

    Exécuté avec succès

    Exécuté en mode strict

    mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
    ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1
    Copier après la connexion

    L'exécution échoue, indiquant que l'identifiant du champ ne peut pas être "

    mysql> insert into mytable(id,name,content) value(null,'fdipzone','programmer');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from mytable;
    +----+----------+------------+
    | id | name     | content    |
    +----+----------+------------+
    |  1 | fdipzone | programmer |
    +----+----------+------------+
    1 row in set (0.00 sec)
    Copier après la connexion

    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éfinissez la valeur par défaut default="

    Exécution en mode non strict

    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;
    +------------------------------+
    | Tables_in_test_version       |
    +------------------------------+
    | mytable                      |
    +------------------------------+
    Copier après la connexion

    Exécution réussie

    Exécution en mode strict

    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;
    ERROR 1101 (42000): BLOB/TEXT column 'content' can't have a default value
    Copier après la connexion

    Échec de l'exécution, indiquant que le champ de contenu est de type TEXTE et que la valeur par défaut ne peut pas être utilisée.

    L'utilisation du mode strict de MySQL peut améliorer la sécurité des données, mais l'inconvénient est qu'il réduit la compatibilité avec les données vides. 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.

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    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
    Derniers numéros
    MySQL arrête le processus
    Depuis 1970-01-01 08:00:00
    0
    0
    0
    Env中mysql
    Depuis 1970-01-01 08:00:00
    0
    0
    0
    Erreur lors de l'installation de MySQL sous Linux
    Depuis 1970-01-01 08:00:00
    0
    0
    0
    php - problème de surveillance MySQL
    Depuis 1970-01-01 08:00:00
    0
    0
    0
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal