ホームページ >データベース >mysql チュートリアル >mysql strictモードの説明 Strictモード
sql_mode で my.cnf
(Windows システムの場合は my.ini) ファイルを見つけ、mysql に STRICT_TRANS_TABLES を追加します。インストールこれが追加されていない場合は、変更後に mysql を再起動するだけです。これは、sql_mode=NO_ENGINE_SUBSTITUTION,
STRICT_TRANS_TABLES
を意味します。 2. Strict Mode 関数の説明
自己増加フィールドへの「値」の挿入をサポートしません
デフォルト値のテキストフィールドをサポートします
3 .例:
<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.not null field insert null value test
非厳密モード 厳密モードで実行されました
<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>
実行は成功しました、名前の値は自動的に変換されます 実行に失敗しました、プロンプト フィールド名を null 値にすることはできません
2. 自動インクリメントフィールドに「値テスト」を挿入します
ID フィールドに「値を挿入します 」 非厳格モードで実行されます
<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>
正常に実行されました
厳密モードで実行されました<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>
実行に失敗しました、フィールド ID を「
<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>」にすることはできないというプロンプトが表示されます。フィールドIDがnullの場合は正常に実行できます
3. テキストフィールドのデフォルト値テストテキストにデフォルト値default=”を設定するデータテーブルmytableを作成します
非厳密モード
<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>
実行成功
厳密モードで実行されました<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>
実行が失敗しました。コンテンツフィールドのタイプが TEXT であることを示すプロンプトが表示されますデフォルト値は使用できません。
要約すると、mysql strict モードを使用すると、データをより安全かつ厳密にすることができますが、欠点は、空のデータ ストレージの互換性が低下することです。コードの品質とデータの厳密性を向上させるために、開発環境では厳密モードを使用することをお勧めします。
この記事は mysql strict モード Strict Mode について説明していますか? 関連する推奨事項の詳細については、php 中国語 Web サイトに注意してください。 関連する推奨事項:
以上がmysql strictモードの説明 Strictモードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。