首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

INT列的默认值疑惑解决方法

2012-03-25 
INT列的默认值疑惑SQL codeCREATE TABLE `test03192` (`test` int(10) DEFAULT NULL) ENGINEInnoDB DEFAU

INT列的默认值疑惑

SQL code
CREATE TABLE `test03192` (  `test` int(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

依次插入值:
SQL code
mysql> INSERT INTO `test03192` VALUES();                    // NULLmysql> INSERT INTO `test03192` VALUES('');                  // 0mysql> INSERT INTO `test03192` VALUES('2');                // 2mysql> INSERT INTO `test03192` VALUES(NULL);           // NULLmysql> INSERT INTO `test03192` VALUES('dsd');            // 0

+------+
| test |
+------+
| NULL |
| 0 |
| 2 |
| NULL |
| 0 |
+------+

两点不明: 
  INT类型为何会允许NULL,而不是转换为0 ?
  最后一个插入语句插入的不是合法INT型,按理该按默认值存为NULL,而怎么会是0

官方手册上没讲这种问题,弄的很迷糊

[解决办法]
INT 允许NULL,这在很多时候是有用的,至少你可以知道是未输入值,还是输入了0值。 既然CHAR允许NULL,那显然不能厚此薄彼,INT或者DECIMAL也支持NULL。

这个在各数据库中基本都是相同定义。
[解决办法]
''
'2'
'asd'

首先这些都不是INT型,是字符串, 不象C中一但数据类型不匹配就报错。MYSQL中首先会做一个数据类型转换。'' 转换成了 0, '2'转换为2, 而 'asd' 同样被MYSQL转换成0. 这个没有为什么,纯属开发MYSQL者自己想怎么就怎么。

热点排行