• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 7年前 (2018-06-02) 138次浏览 已收录 0个评论

INT列的默认值疑惑

SQL code

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

欢迎大家阅读《INT列的默认值疑惑解决方法》,跪求各位点评,by 搞代码

依次插入值:

SQL code

  mysql> INSERT INTO `test03192` VALUES();                    // NULL mysql> INSERT INTO `test03192` VALUES('');                  // 0 mysql> INSERT INTO `test03192` VALUES('2');                // 2 mysql> INSERT INTO `test03192` VALUES(NULL);           // NULL mysql> 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者自己想怎么就怎么。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:INT列的默认值疑惑解决方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址