国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL實(shí)踐】一個(gè)隱蔽的問題導(dǎo)致 Field ‘xxx‘ doesn‘t have a default value

這篇具有很好參考價(jià)值的文章主要介紹了【MySQL實(shí)踐】一個(gè)隱蔽的問題導(dǎo)致 Field ‘xxx‘ doesn‘t have a default value。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.背景

最后在公司的后臺(tái)系統(tǒng)上遇到了一個(gè)線上問題,是在插入某個(gè)表數(shù)據(jù)的時(shí)候出現(xiàn)了數(shù)據(jù)庫(kù)的插入異常,即:java.sql.SQLException: Field 'xxx' doesn't have a default value,這其實(shí)是一個(gè)比較常見的異常,一般在字段不能為null時(shí),如果沒有顯式的指定對(duì)應(yīng)字段的值就會(huì)拋出這個(gè)異常。

但是今天遇到的這個(gè)異常原因還不是這樣的,實(shí)際原因有點(diǎn)隱蔽,所以在這里記錄一下今天遇到的這個(gè)問題。

2.問題處理

下面以一張Demo表為例來進(jìn)行說明,有一個(gè)可以為null的字段與一個(gè)不能為null的字段。

create table demo
(
    id     bigint auto_increment comment '主鍵' primary key,
    name   varchar(64) null comment '名稱',
    status tinyint     not null comment '狀態(tài)'
);

問題排查:
就像在背景中提到的,當(dāng)字段不能為null時(shí),很容易觸發(fā)上述的異常,于是在第一時(shí)間檢查DDL,發(fā)現(xiàn)字段name可以為空。這就奇怪了,正常情況下不會(huì)出現(xiàn)這個(gè)問題,于是懷疑這種可以為空的字段,在某種特殊情況會(huì)導(dǎo)致沒有默認(rèn)值的異常。

于是通過搜索引擎和GPT提出了我的問題,當(dāng)時(shí)問題聚焦于null和非null字段上,得到的結(jié)果基本上都指向了可以為null的字段不會(huì)出現(xiàn)這個(gè)問題。

轉(zhuǎn)換思路:
搜索無(wú)果后,嘗試轉(zhuǎn)換了一下思路,再重新關(guān)注一下問題的描述 Field 'xxx' doesn't have a default value,當(dāng)時(shí)靈光一閃,提示已經(jīng)非常清晰了沒有默認(rèn)值。經(jīng)過測(cè)試發(fā)現(xiàn),在建表和新增字段的時(shí)候,對(duì)于可以為null的字段,即使是沒有顯示的指定一個(gè)deafult,也會(huì)自動(dòng)分配一個(gè)默認(rèn)值null
也就是說,下面兩個(gè)ddl是等價(jià)的。

# 不顯示指定默認(rèn)值
alter table demo
    add age int null comment '年齡';
# 顯示指定默認(rèn)值null
alter table demo
    add age int null comment '年齡' default null;

既然問題沒有出現(xiàn)在字段的創(chuàng)建上,那多半是后期在對(duì)數(shù)據(jù)庫(kù)修數(shù)的時(shí)候,刪除了字段的默認(rèn)值。于是去查看了一下數(shù)據(jù)庫(kù)的工單申請(qǐng)列表,果然發(fā)現(xiàn)了端倪,有這么一個(gè)ddl

alter table demo
    alter column name drop default;

問題復(fù)現(xiàn):
嘗試在測(cè)試環(huán)境執(zhí)行這條sql,并通過insert語(yǔ)句在不顯示指定name字段的情況下,插入一條數(shù)據(jù):

insert into demo (status) values ( 1);

執(zhí)行結(jié)果如下:
【MySQL實(shí)踐】一個(gè)隱蔽的問題導(dǎo)致 Field ‘xxx‘ doesn‘t have a default value,# MySQL,數(shù)據(jù)庫(kù),mysql,android,數(shù)據(jù)庫(kù)
問題解決:
問題已經(jīng)定位復(fù)現(xiàn)后,再重新設(shè)置字段的默認(rèn)值即可:

alter table demo
    alter column name set default null;

3.思考與總結(jié)

就像標(biāo)題上說的,這個(gè)問題的隱蔽之處在于,即使是將字段的默認(rèn)值drop了,在各類可視化界面中也看不出來,例如下圖紅框中的字段,其中name沒有默認(rèn)值,age字段有默認(rèn)值null,但是根本看不出來:
【MySQL實(shí)踐】一個(gè)隱蔽的問題導(dǎo)致 Field ‘xxx‘ doesn‘t have a default value,# MySQL,數(shù)據(jù)庫(kù),mysql,android,數(shù)據(jù)庫(kù)
這種情況可以,可以使用SHOW CREATE TABLE demo;獲取原始的建表語(yǔ)句:

CREATE TABLE `demo` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(64) COMMENT '名稱',
  `status` tinyint(4) NOT NULL COMMENT '狀態(tài)',
  `age` int(11) DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4

這里就可以看到nameage字段的默認(rèn)值區(qū)別了。


最后是一些思考和總結(jié):

  • 如果沒有顯式的指定字段默認(rèn)值,在創(chuàng)建字段的時(shí)候會(huì)自動(dòng)將默認(rèn)值指定為null。
  • not null字段,無(wú)法自動(dòng)指定默認(rèn)值,需要顯示的指定。
  • 可以使用SHOW CREATE TABLE demo;查看原始的建表語(yǔ)句,能直接看到默認(rèn)值是否存在。

最后,如果需要修改默認(rèn)值,將期設(shè)置為一個(gè)具體的值(哪怕設(shè)置為null),盡可能的不要使用drop default刪除字段默認(rèn)值,以此來避免一些意料之外的問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-821655.html

到了這里,關(guān)于【MySQL實(shí)踐】一個(gè)隱蔽的問題導(dǎo)致 Field ‘xxx‘ doesn‘t have a default value的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 對(duì)文件權(quán)限誤操作導(dǎo)致的sudo報(bào)錯(cuò)Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”的問題

    對(duì)文件權(quán)限誤操作導(dǎo)致的sudo報(bào)錯(cuò)Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”的問題

    ????? 系統(tǒng)是Ubuntu20.04,使用VsCode在局域網(wǎng)ssh登陸主機(jī)。 為了給ssh登陸主機(jī)的vscode提供寫入權(quán)限,試圖用這個(gè)命令給vscode整個(gè)etc文件夾的讀取權(quán)限 然后sudo就沒有辦法使用了 只有一個(gè)用戶,沒有超級(jí)管理員,沒有sudo沒有辦法修改權(quán)限的配置文件。 試圖將權(quán)限改回全部用戶的

    2024年02月12日
    瀏覽(16)
  • Module not found: Error: Can‘t resolve “xxx“ in “xxx“導(dǎo)致該問題的解決方案

    Module not found: Error: Can‘t resolve “xxx“ in “xxx“導(dǎo)致該問題的解決方案

    先看報(bào)錯(cuò)提示 ? ? ?根據(jù)報(bào)錯(cuò)提示反應(yīng)的情況是:找不到模塊:錯(cuò)誤:無(wú)法解析 在遇到報(bào)錯(cuò)時(shí)應(yīng)該仔細(xì)閱讀報(bào)錯(cuò)提示,這樣解決起來也不會(huì)沒有頭緒 在紅色遮擋下有該報(bào)錯(cuò)出現(xiàn)的主要原因 在此處我們談?wù)撘幌陆鉀Q該類報(bào)錯(cuò)的幾種方法 1:在非路由組件中出現(xiàn)了圖片路徑,而

    2024年02月03日
    瀏覽(29)
  • Mysql出現(xiàn)問題:ERROR 1146 (42S02) Table ‘**‘ doesn‘t exist解決方案

    Mysql出現(xiàn)問題:ERROR 1146 (42S02) Table ‘**‘ doesn‘t exist解決方案

    回城傳送–》《數(shù)據(jù)庫(kù)問題解決方案》 ??作者主頁(yè):小虛竹 ??作者簡(jiǎn)介:大家好,我是小虛竹。Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者??,CSDN博客專家??,華為云享專家??,掘金年度人氣作者??,阿里云專家博主??,51CTO專家博主?? ??技術(shù)活,該賞 ??點(diǎn)贊 ?? 收藏 ?再看,養(yǎng)成習(xí)

    2024年02月08日
    瀏覽(22)
  • Cause: java.sql.SQLSyntaxErrorException: Table ‘xxx數(shù)據(jù)庫(kù).xxx表‘ doesn‘t exist

    Cause: java.sql.SQLSyntaxErrorException: Table ‘xxx數(shù)據(jù)庫(kù).xxx表‘ doesn‘t exist

    Cause: java.sql.SQLSyntaxErrorException: Table ‘xxx數(shù)據(jù)庫(kù).xxx表‘ doesn‘t exist 這個(gè)錯(cuò)誤通常表示在數(shù)據(jù)庫(kù)中找不到指定的表。出現(xiàn)這個(gè)錯(cuò)誤的原因可能有幾種,包括以下情況: 表不存在:最明顯的原因是表確實(shí)不存在于數(shù)據(jù)庫(kù)中。這可能是由于表名拼寫錯(cuò)誤、數(shù)據(jù)庫(kù)連接錯(cuò)誤或表在數(shù)

    2024年02月05日
    瀏覽(24)
  • Field error in object ‘xxx‘ on field ‘xxx‘: rejected value [xx];

    字段上對(duì)象“xxx”中的field錯(cuò)誤,拒絕了值[xxx]。意思是:在Springboot等其他框架中編寫程序時(shí),前端傳入的數(shù)據(jù)例如 前端代碼如下 這個(gè)phone從客戶端接收的值與后端entity中定義的屬性值不匹配(與數(shù)據(jù)庫(kù)定義的值的類型不匹配)時(shí),就發(fā)生接收值類型錯(cuò)誤。 解決辦法: 看是

    2024年02月10日
    瀏覽(142)
  • 使用postman訪問springboot項(xiàng)目,出現(xiàn)Unsupported Media Type 415錯(cuò)誤以及 Field ‘userId‘ doesn‘t have a default value

    使用postman訪問springboot項(xiàng)目,出現(xiàn)Unsupported Media Type 415錯(cuò)誤以及 Field ‘userId‘ doesn‘t have a default value

    idea控制臺(tái)顯示 Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘multipart/form-data;boundary=--------------------------508983844580882655519308;charset=UTF-8’ not supported] postman軟件下顯示 按照以前的邏輯,第一時(shí)間訪問度娘,將requesthead中Content-Type改為application/json,發(fā)現(xiàn)沒多大用

    2023年04月18日
    瀏覽(14)
  • Java過濾器配置類導(dǎo)致跨域問題:Request header field token is not allowed by Access-Control-Allow-Headers in prefli

    Java過濾器配置類導(dǎo)致跨域問題:Request header field token is not allowed by Access-Control-Allow-Headers in prefli

    前端:Vue、Axios 后端:Spring Security、SpringBoot、JWT等等 報(bào)錯(cuò)信息如下(前端): 報(bào)錯(cuò)信息翻譯: 在preflight響應(yīng)中,Access-Control-Allow-Headers不允許請(qǐng)求報(bào)頭字段標(biāo)記。 這個(gè)翻譯也讓我們很快知道了問題的所在,就是Access-Control-Allow-Headers里面不允許token字段出現(xiàn),也就是說,tok

    2024年02月04日
    瀏覽(23)
  • Centos7 開機(jī)時(shí)遇到initramfs-xxx.img not found錯(cuò)誤導(dǎo)致虛擬機(jī)無(wú)法開啟問題處理

    Centos7 開機(jī)時(shí)遇到initramfs-xxx.img not found錯(cuò)誤導(dǎo)致虛擬機(jī)無(wú)法開啟問題處理

    一臺(tái)運(yùn)行在Esxi上面的VM重啟后報(bào)initramfs-xxx.img not found錯(cuò)誤。 按任意鍵后出現(xiàn)以下錯(cuò)誤。 之前在運(yùn)維Centos7的時(shí)候解決過Kernel panic - not syncing : VFS: Unable to mount root fs on unknown-block(0.0)錯(cuò)誤,以為按照之前的解決方案,重啟服務(wù)器,按Esc進(jìn)入選擇內(nèi)核的界面,選擇中間的內(nèi)核啟動(dòng)服

    2023年04月20日
    瀏覽(23)
  • mysql 啟動(dòng)報(bào)錯(cuò) Can t change dir to xxx, No such file or directory 配置錯(cuò)誤或掛載導(dǎo)致

    掛載的話,使用 /etc/fstab 放fstab里會(huì)在程序啟動(dòng)前加載NFS文件系統(tǒng),放rc.local里往往造成程序啟動(dòng)加載時(shí)找不到路徑。 ? 在企業(yè)中,服務(wù)器重啟,有時(shí)候會(huì)遇到mysql 啟動(dòng)報(bào)錯(cuò) Can`t change dir to \\\'xxx\\\', No such file or directory。大致意思是無(wú)法將目錄換成xxx,因?yàn)闆]有這個(gè)目錄。 原因通

    2024年02月08日
    瀏覽(32)
  • Unknown column ‘xxx‘ in ‘field list‘

    Unknown column ‘xxx‘ in ‘field list‘

    MySQL數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),出現(xiàn)Unknown column \\\'XXX\\\' in \\\'field list\\\'?問題(\\\'XXX\\\'表示任意字符)。例如下面: 然后向其中插入一行數(shù)據(jù): 控制臺(tái)就會(huì)報(bào)錯(cuò):Unknown column \\\'info\\\' in \\\'field list\\\' 1、該列名在數(shù)據(jù)表中不存在,也就是SQL語(yǔ)句中的列名寫錯(cuò)了。 2、數(shù)據(jù)表中的列名多了一個(gè)空格,解決

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包