32

详解MySQL数据库default设置的三种不同表现

 4 years ago
source link: http://database.51cto.com/art/201911/606546.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们在建表的时候有时候会加default默认值,有时不加,而default默认值又有''和NULL两种情况,那么这三种不同情况具体表现成什么呢?这里用一个实验来简单测试一下。

eEN3U3U.jpg!web

1. 建表脚本

CREATE TABLE `test` ( 
 `uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 
 `USER_CODE` varchar(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户编码', 
 `LEAVE_REASON` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请假理由', 
 PRIMARY KEY (`uid`) USING BTREE 
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 

2. 查看列定义

SELECT 
 c.TABLE_SCHEMA '数据库', 
 c.TABLE_NAME '表', 
 c.COLUMN_NAME '字段', 
 c.COLUMN_DEFAULT '默认值', 
 c.IS_NULLABLE '是否为空', 
 c.DATA_TYPE '字段类型', 
 c.character_set_name '字符集', 
 c.collation_name '排序规则'  
FROM 
 information_schema.`COLUMNS` c  
WHERE 
 TABLE_NAME = 'test' 

这里可以发现default设置为NULL和default不设置在information_schema.`COLUMNS`表都表现为NULL,如果我们脚本从这个去判断很容易就和是否为空产生了冲突。

n6Z7RnE.jpg!web

3. 从navicat观察

如果直接从navicat去看表定义,可以发现不同的表现。

nQFB73e.jpg!web

qE3EZrQ.jpg!web

VbUfu2i.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK