SET sql_mode = '';
SET sql_mode = ANSI_QUOTES; SET sql_mode = 'TRADITIONAL';
SET sql_mode = 'IGNORE_SPACE,ANSI_QUOTES'; SET sql_mode = 'STRICT_ALL_TABLES,ERROR_FOR_DIVIZION_BY_ZERO'
SET [GLOBAL|SESSION] sql_mode='';
SELECT @@global.sql_mode; SELECT @@session.sql_mode;
mysql> CREATE TABLE test11 (`order` INT NULL) ENGINE = InnoDB; Query OK, 0 rows affected (0.28 sec) mysql> CREATE TABLE test12 ("order" INT NULL) ENGINE = InnoDB; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"order" INT NOT NULL) ENGINE = InnoDB' at line 1 mysql> SET sql_mode = 'ANSI_QUOTES'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE test12 ("order" INT NULL) ENGINE = InnoDB; Query OK, 0 rows affected (0.08 sec)
mysql> SELECT COUNT (*) FROM test12; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM test12' at line 1 mysql> SET sql_mode = 'IGNORE_SPACE'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT COUNT (*) FROM test12; +-----------+ | COUNT (*) | +-----------+ | 0 | +-----------+ 1 row in set (0.01 sec)
mysql> SELECT 1 / 0; +-------+ | 1 / 0 | +-------+ | NULL | +-------+ 1 row in set (0.00 sec) mysql> SHOW WARNINGS; Empty set (0.00 sec) mysql> INSERT INTO test12 VALUES (1/0); Query OK, 1 row affected (0.02 sec) mysql> SHOW WARNINGS; Empty set (0.00 sec) mysql> SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT 1 / 0; +-------+ | 1 / 0 | +-------+ | NULL | +-------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | +---------+------+---------------+ 1 row in set (0.00 sec) mysql> INSERT INTO test12 VALUES (1/0); Query OK, 1 row affected, 1 warning (0.02 sec) mysql> SHOW WARNINGS; +---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | +---------+------+---------------+ 1 row in set (0.00 sec) mysql> INSERT INTO test12 VALUES ('some string'/0); Query OK, 1 row affected, 2 warnings (0.02 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'some string' | | Warning | 1365 | Division by 0 | +---------+------+-------------------------------------------------+ 2 rows in set (0.00 sec)
mysql> SET sql_mode = 'TRADITIONAL'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@sql_mode\G *************************** 1. row *************************** @@sql_mode: STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 1 row in set (0.00 sec)
mysql> SELECT name, address, MAX(age) FROM test GROUP BY name; ERROR 1055 (42000): 't.address' isn't in GROUP BY mysql> SELECT name, MAX(age) as max_age FROM test GROUP BY name HAVING max_age < 30; Empty set (0.00 sec) ERROR 1463 (42000): Non-grouping field 'max_age' is used in HAVING clause
PDO::__construct() ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode = 'TRADITIONAL'"));
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET sql_mode = 'TRADITIONAL'");
mysql> SET sql_mode = 'STRICT_ALL_TABLES'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE test20 ( -> x TINYINT NOT NULL, -> y TINYINT NOT NULL -> ) ENGINE = MyISAM; Query OK, 0 rows affected (0.08 sec) mysql> INSERT INTO test20 VALUES (1, 1), (2, 2), (3, 3), (NULL, 4), (5, 5); ERROR 1048 (23000): Column 'x' cannot be null mysql> SELECT * FROM test20; +---+---+ | x | y | +---+---+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +---+---+ 3 rows in set (0.01 sec) mysql> UPDATE test20 SET x = x + 125, y = y + 1; ERROR 1264 (22003): Out of range value for column 'x' at row 3 mysql> SELECT * FROM test20; +-----+---+ | x | y | +-----+---+ | 126 | 2 | | 127 | 3 | | 3 | 3 | +-----+---+ 3 rows in set (0.00 sec)
mysql> CREATE TABLE test31 ( -> i TINYINT NOT NULL, -> j TINYINT NOT NULL, -> k TINYINT NOT NULL -> ) ENGINE = InnoDB; Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO test31 (i, j, k) VALUES (-500, 10, 500); Query OK, 1 row affected, 2 warnings (0.06 sec) mysql> SELECT * FROM test30; +------+----+-----+ | i | j | k | +------+----+-----+ | -128 | 10 | 127 | +------+----+-----+ 1 row in set (0.00 sec)
mysql> CREATE TABLE test32 ( col1 VARCHAR(10) ) ENGINE = InnoDB; Query OK, 0 rows affected (0.11 sec) mysql> INSERT INTO test32 VALUES ('I\m really the biggest string'); Query OK, 1 row affected, 1 warning (0.03 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1265 | Data truncated for column 'col1' at row 1 | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM test32; +------------+ | col1 | +------------+ | Im really | +------------+ 1 row in set (0.00 sec)
mysql> CREATE TABLE test33 ( -> col1 ENUM('One', 'Two', 'Three'), -> col2 SET('One', 'Two', 'Three') -> ) ENGINE = InnoDB; Query OK, 0 rows affected (0.12 sec) mysql> INSERT INTO test33 VALUES ('Five', 'One,Three,Five'); Query OK, 1 row affected, 2 warnings (0.04 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1265 | Data truncated for column 'col1' at row 1 | | Warning | 1265 | Data truncated for column 'col2' at row 1 | +---------+------+-------------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM test33; +------+-----------+ | col1 | col2 | +------+-----------+ | | One,Three | +------+-----------+ 2 rows in set (0.00 sec)
mysql> CREATE TABLE test34 ( -> col1 DATETIME, -> col2 DATETIME -> ) ENGINE = InnoDB; Query OK, 0 rows affected (0.14 sec) mysql> INSERT INTO test34 VALUES ('string', 123); Query OK, 1 row affected, 1 warning (0.12 sec) mysql> SHOW WARNINGS; +---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1264 | Out of range value for column 'col1' at row 1 | +---------+------+-----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM test34; +---------------------+---------------------+ | col1 | col2 | +---------------------+---------------------+ | 0000-00-00 00:00:00 | 2000-01-23 00:00:00 | +---------------------+---------------------+ 1 row in set (0.00 sec)
STRING | DATE | Int |
'2010-03-12' | '2010-03-12' | 2010 |
'03 -12-2010 ' | '0000-00-00' | 3 |
'0017' | '0000-00-00' | 17 |
'500 hats' | '0000-00-00' | 500 |
'bartholomew' | '0000-00-00' | 0 |
mysql> CREATE TABLE test35 ( -> i INT NULL, -> i2 INT NOT NULL, -> j VARCHAR(20) NOT NULL, -> k DATETIME -> ) ENGINE = InnoDB; Query OK, 0 rows affected (0.15 sec) mysql> INSERT INTO test35 VALUES (NULL, 9999, 'very cool string', '1910-01-01 12:10:00'); Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM test35; +------+------+------------------+---------------------+ | i | i2 | j | k | +------+------+------------------+---------------------+ | NULL | 9999 | very cool string | 1910-01-01 12:10:00 | +------+------+------------------+---------------------+ 1 row in set (0.00 sec) mysql> ALTER TABLE test35 -> CHANGE COLUMN `i` `i` INT(11) NOT NULL, -> CHANGE COLUMN `i2` `i2` TINYINT(1) NOT NULL, -> CHANGE COLUMN `j` `j` VARCHAR(2) NOT NULL, -> CHANGE `k` `k` TIMESTAMP NULL DEFAULT NULL; Query OK, 1 row affected, 4 warnings (0.42 sec) Records: 1 Duplicates: 0 Warnings: 4 mysql> SHOW WARNINGS; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1265 | Data truncated for column 'i' at row 1 | | Warning | 1264 | Out of range value for column 'i2' at row 1 | | Warning | 1265 | Data truncated for column 'j' at row 1 | | Warning | 1264 | Out of range value for column 'k' at row 1 | +---------+------+---------------------------------------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM test35; +---+-----+----+---------------------+ | i | i2 | j | k | +---+-----+----+---------------------+ | 0 | 127 | ve | 0000-00-00 00:00:00 | +---+-----+----+---------------------+ 1 row in set (0.00 sec)
mysql> CREATE TABLE test40 ( -> x INT NOT NULL PRIMARY KEY -> ) ENGINE = InnoDB; Query OK, 0 rows affected (0.14 sec) mysql> INSERT IGNORE INTO test40 VALUES (1), (2), (2), (3), (4); Query OK, 4 rows affected (0.02 sec) Records: 5 Duplicates: 1 Warnings: 0 mysql> SELECT * FROM test40; +---+ | x | +---+ | 1 | | 2 | | 3 | | 4 | +---+ 4 rows in set (0.02 sec) mysql> INSERT INTO test40 VALUES (1), (2), (2), (3), (4); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' mysql> UPDATE IGNORE test40 SET x = 3 WHERE x = 2; Query OK, 0 rows affected (0.07 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> UPDATE test40 SET x = 3 WHERE x = 2; ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'
mysql> INSERT INTO test40 VALUES (10) ON DUPLICATE KEY UPDATE x = x + 10; Query OK, 1 row affected (0.25 sec) mysql> SELECT * FROM test40; +----+ | x | +----+ | 1 | | 2 | | 3 | | 4 | | 10 | +----+ 5 rows in set (0.06 sec) mysql> INSERT INTO test40 VALUES (10) ON DUPLICATE KEY UPDATE x = x + 10; Query OK, 2 rows affected (0.07 sec) mysql> SELECT * FROM test40; +----+ | x | +----+ | 1 | | 2 | | 3 | | 4 | | 20 | +----+ 5 rows in set (0.00 sec)
Source: https://habr.com/ru/post/166411/
All Articles