ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sql mode 类型(ZT)

sql mode 类型(ZT)

原创 Linux操作系统 作者:lwitpub 时间:2009-09-15 15:25:29 0 删除 编辑
在Mysql5.0以下,默认的sql mode(sql mode参数)有:real_as_float,pipes_as_concat,ansi_quotes,gnore_space和ANSI。在这些模式下可以插入超过字段定义长度的数据,或是在字段中没有定义的元素数据(如,enum)。不过在插入后会有一个warning(可以用 show warnings来查看)。
 
在Mysql5.0以上版本中,有三种sql mode模式(ANSI、TRADITIONAL和STRICT_TRANS_TABLES(严格模式))可以用来解决以下问题:
(1). 通过设置不同的sql mode,可以在不同严格程序进行数据校验,有效地保证了数据准确性.
(2).通过设置sql mode为ANSI模式,来保证大多数SQL符合标准SQL的语法,这样在不同数据库之间迁移时,不需要对业务修改太多.
通过设置sql mode为STRICT_TRANS_TABLES(严格模式)来实现数据的严格校检,使错误数据不能插入,从而保证数据准确性。TRADITIONAL模式也属于严格模式,同样可以实现严格校检,使错误数据不能插入,从而保证数据准确性。不过在这种模式MAX(X,0)返回的结果是NULL,所以在包含有MAX的运算中根据实际情况设定好sql mode.
ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。在某些情况下,ENUM值也可以为空字符串('')或NULL:如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。
如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且 默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
(1)sql mode为ANSI
mysql> create table test(id bigint(20) auto_increment primary key, browsertype enum('ie','firefox','other'));
mysql> insert into test(browsertype) values('ie') ;
Query OK, 1 row affected (0.07 sec)
 
mysql> insert into test(browsertype) values('maxthon') ;
Query OK, 1 row affected (0.03 sec)
 
mysql> show warnings;(数据虽然成功insert,但有warning)
+---------+------+--------------------------------------------------+
| Level   | Code | Message                                          |
+---------+------+--------------------------------------------------+
| Warning | 1265 | Data truncated for column 'browsertype' at row 1 |
+---------+------+--------------------------------------------------+
1 row in set (0.01 sec)
mysql> select * from test;
+----+-------------+
| id | browsertype |
+----+-------------+
|  1 | ie          |
|  2 |             |
+----+-------------+
2 rows in set (0.01 sec)
(2)使用严格模式(STRICT_TRANS_TABLES)
mysql> set session sql_mode='STRICT_TRANS_TABLES';
Query OK, 0 rows affected (0.00 sec)
 
mysql> select @@sql_mode;
+---------------------+
| @@sql_mode          |
+---------------------+
| STRICT_TRANS_TABLES |
+---------------------+
1 row in set (0.00 sec)
mysql> insert into test(browsertype) values('maxthon') ;
ERROR 1265: Data truncated for column 'browsertype' at row 1

mysql> insert into test(browsertype) values('firefox') ;
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from test;
+----+-------------+
| id | browsertype |
+----+-------------+
|  1 | ie          |
|  2 |             |
|  3 | firefox     |
+----+-------------+
3 rows in set (0.00 sec)
(3) TRADITIONAL模式
mysql> create table t11 (i int);
Query OK, 0 rows affected (0.02 sec)
 
mysql> set sql_mode='ANSI';
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into t11 values(9%0);
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from t11;
+------+
| i         |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
mysql> set sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t11 values(9%0);
ERROR 1365: Division by 0
mysql> show warnings;
+-------+------+---------------+
| Level | Code | Message       |
+-------+------+---------------+
| Error | 1365 | Division by 0 |
+-------+------+---------------+
1 row in set (0.02 sec)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/628922/viewspace-614690/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORA-12162: TNS错误
下一篇: 数据库管理(ZT)
请登录后发表评论 登录
全部评论

注册时间:2009-05-08

  • 博文量
    107
  • 访问量
    381197