
(2)创建测试表 t31:
create table t31(id int,name varchar(20));
(3)在表 t31 中插入一条记录,其中 name 故意超出了实际的定义值 varchar(20):
mysql> insert into t31 values(1,'12340000000000000000999999');
ERROR 1406 (22001): Data too long for column 'name' at row 1
结果发现,记录没有插入成功,给出了一个 ERROR。
(4)接下来设置 SQL Mode 为 ANSI 模式:
mysql> set sql_mode='ANSI';
Query OK, 0 rows affected (0.01 sec)
mysql> select @@sql_mode;
+--------------------------------------------------------------------------------+
| @@sql_mode |
+--------------------------------------------------------------------------------+
|
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_F
ULL_GROUP_BY,ANSI |
+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)
REAL_AS_FLOAT:启用 REAL_AS_FLOAT 模式,那 么,MySQL 就认为 REAL 是
FLOAT。
PIPES_AS_CONCAT:启用 PIPES_AS_CONCAT 模式。MySQL 将“||”视为字符串连接
操作符。
ANSI_QUOTES:默认情况下,MySQL 使用反引号(`)作为标识符的引号。使用 mysql 关
键字作为表名、字段名会报语法错误,这时可以加上反引号( `),避免报错。启用
ANSI_QUOTES 后,使用双引号(")作为标识符的引号。
IGNORE_SPACE:启用 IGNORE_SPACE 模式,MySQL 可以忽略 SQL 语句中的空格,
因此 SQL 语句可以更加灵活。
ONLY_FULL_GROUP_BY:SELECT 后面的字段必须出现在 group by 后面,否则会报错。
(5)再次尝试插入上面的测试记录:
mysql> insert into t31 values(1,'12340000000000000000999999');
Query OK, 1 row affected, 1 warning (0.00 sec)
可以发现,记录可以插入,但是显示了一个 warning,查看 warning 内容:
mysql> show warnings;
+---------+------+-------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------+
| Warning | 1265 | Data truncated for column 'name' at row 1 |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)
(5)warning 提示对插入的 name 值进行了截断,从表 t31 中查看实际插入值:
mysql> select * from t31;
+------+----------------------+
| id | name |
+------+----------------------+
评论