日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别

發布時間:2025/3/12 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Navicat mysql 建表字段 默認值、empty string、空白、NULL 的區別

總結在最后,沒啥干貨

簡單測試了4種類型 bigint tinyint varchar char

單引號 ‘’

雙引號 “”

自定義的默認值 如: 未知的姓名

===================================================

新建一張用戶表

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '編號',`name` varchar(64) DEFAULT NULL COMMENT '姓名',`gender` char(64) DEFAULT NULL COMMENT '性別',`age` tinyint(4) DEFAULT NULL COMMENT '年齡' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這張表 由于沒設置主鍵 所以可以新增一條 4個字段都是null的數據 (當然這樣的數據是毫無意義的)

所有的字段默認值都是 NULL

一. 不做非空約束

1)將所有字段全部設置為空白【NULL>>空白】

SQL預覽

ALTER TABLE `user` MODIFY COLUMN `id` bigint(20) NULL COMMENT '編號' FIRST , MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '性別' AFTER `name`, MODIFY COLUMN `age` tinyint(4) NULL COMMENT '年齡' AFTER `gender`;

保存結果:成功,表結構沒有改變

結論:不做非空約束時,空白 和 NULL 是相同的

2)NULL值是默認的,也不需要測試了【NULL>>NULL】

3)全部修改為 Empty string【NULL>>Empty string】

ALTER TABLE `user` MODIFY COLUMN `id` bigint(20) NULL DEFAULT '' COMMENT '編號' FIRST , MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '性別' AFTER `name`, MODIFY COLUMN `age` tinyint(4) NULL DEFAULT '' COMMENT '年齡' AFTER `gender`;

保存結果:失敗,報錯【1067 - Invalid default value for ‘id’】

其實從改動的sql語句中就能看出來 數字是不存在 ‘’ 這種類型的

結論:無非空約束時,bigint、tinyint類型都不能被設置為 Empty string

此時的表結構

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '編號',`name` varchar(64) DEFAULT '' COMMENT '姓名',`gender` char(64) DEFAULT '' COMMENT '性別',`age` tinyint(4) DEFAULT NULL COMMENT '年齡' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

那么這里就有一個疑問了【如果我手動給name、age設置值’’ “” 或者’未知名稱’的區別】

a.

ALTER TABLE `user` MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '性別' AFTER `name`;

b.

ALTER TABLE `user` MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "" COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "" COMMENT '性別' AFTER `name`;

a、b保存結果:成功,表結構沒有改變

c.

ALTER TABLE `user` MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '未知名稱' COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '未知性別' COMMENT '性別' AFTER `name`;

保存結果:成功,表結構如下

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '編號',`name` varchar(64) DEFAULT '未知名稱' COMMENT '姓名',`gender` char(64) DEFAULT '未知性別' COMMENT '性別',`age` tinyint(4) DEFAULT NULL COMMENT '年齡' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

該表結構,如果新增一條數據

INSERT INTO `user` (age) VALUES (10);

得到的數據是這樣的

你可以不設置值,數據庫自動設置了默認值,但是這里會有個陷阱

INSERT INTO `user` (name, age) VALUES (NULL, 11);

沒有使用默認值哦,在使用類似PageHelper這樣的插件時,注意 insert insertSelective兩種方法

小結:不做非空約束時,empty string只針對 字符 類型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的

二. 勾選“不是null”

恢復為初始狀態,勾選“不是null”表結構如下

CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '編號',`name` varchar(64) NOT NULL COMMENT '姓名',`gender` char(64) NOT NULL COMMENT '性別',`age` tinyint(4) NOT NULL COMMENT '年齡' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

此時,所有字段默認都變成了 空白

1)默認為空白,跳過【空白>>空白】

2)修改為:NULL【空白>>NULL】

ALTER TABLE `user` MODIFY COLUMN `id` bigint(20) NOT NULL COMMENT '編號' FIRST , MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '性別' AFTER `name`, MODIFY COLUMN `age` tinyint(4) NOT NULL COMMENT '年齡' AFTER `gender`;

保存結果:成功,表結構無變化

3)修改為:Empty string或者 ‘’ 或者 “”【空白>>Empty string】【空白>>’’】【空白>>""】,忽略bigint tinyint

ALTER TABLE `user` MODIFY COLUMN `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '姓名' AFTER `id`, MODIFY COLUMN `gender` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '性別' AFTER `name`,

保存結果:成功,表結構如下

CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '編號',`name` varchar(64) NOT NULL DEFAULT '' COMMENT '姓名',`gender` char(64) NOT NULL DEFAULT '' COMMENT '性別',`age` tinyint(4) NOT NULL COMMENT '年齡' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這里遇到一個情況

如果是bigint設置成’'再選擇成空白,導致保存失敗,sql語句是

MODIFY COLUMN `id` bigint(20) NOT NULL DEFAULT '' COMMENT '編號' FIRST ;

選擇NULL才可以恢復,可能是我使用的版本問題

小結: 勾選“不是null”時,empty string只針對 字符 類型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的

總結:

1.’'和""同Empty string的效果是相同的(沒有內容長度的默認值)

只能使用在字符類型 如: char、varchar、text等,不能使用在數字、時間等類型 如:int、tinyint、bigint、date、double

因為會提示報錯

2.空白 和 NULL的效果是相同的,具體情況取決于【非空約束】

a. 非空約束: 都是 DEFAULT NULL

b. 非空約束: 都是 NOT NULL

3.如果感覺看不太明白,建議自己動手測試一下

畢竟1個字段上最直觀的展現就DDL語句

博主,你的文筆太垃圾了,每一個字我都認識,連在一起看的我云里霧里的,給點干貨?

1.字段勾選上 不是 null

2.設置默認值

3.特殊情況,像是“備注”這種字段,不會成為查詢條件的,就隨意

寫的不夠嚴謹的地方,希望大家多多指正!

總結

以上是生活随笔為你收集整理的NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。