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

Comment utiliser le mode strict de MySQL

WBOY
WBOYavant
2023-05-26 15:10:152378parcourir

    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;

    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)

    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

    É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)

    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

    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)

    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                      |
    +------------------------------+

    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

    É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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer