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

SQLIntegrityConstraintViolationException: Column ‘create_time‘ cannot be null

這篇具有很好參考價(jià)值的文章主要介紹了SQLIntegrityConstraintViolationException: Column ‘create_time‘ cannot be null。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概述

在使用MySQL + MyBatis時(shí)遇到的問(wèn)題,記錄一下。

問(wèn)題

在測(cè)試環(huán)境里,往MySQL數(shù)據(jù)表里插入數(shù)據(jù)時(shí)報(bào)錯(cuò):SQLIntegrityConstraintViolationException: Column 'create_time' cannot be null

表結(jié)構(gòu)字段定義:

create_time datetime default CURRENT_TIMESTAMP not null comment '創(chuàng)建日期',

備注:
MySQL數(shù)據(jù)庫(kù)版本:

select version();
5.7.30

使用的MyBatis版本:

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</dependency>

使用的MySQL驅(qū)動(dòng)版本:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

排查

參考mysql-insert-error-cannot-be-null-datetime-not-null-default-current-timestamp。

給出的解釋是:

The MySQL 5.7 manual states that…

In addition, you can initialize or update any TIMESTAMP column to the current date and time by assigning it a NULL value, unless it has been defined with the NULL attribute to permit NULL values.

The manual does not say you can do this for DATETIME fields.

簡(jiǎn)單翻譯下,就是TIMESTAMP字段能夠?qū)崿F(xiàn)插入當(dāng)前時(shí)間,datetime字段則不一定能保證。

修改測(cè)試環(huán)境下的表結(jié)構(gòu)定義語(yǔ)句:

create_time timestamp default CURRENT_TIMESTAMP not null comment '創(chuàng)建日期',

stackoverflow還是非??孔V,問(wèn)題解決。

datetime & timestamp

相同:都可以表示YYYY-MM-DD HH:MM:SS這種年月日時(shí)分秒格式的數(shù)據(jù)。MySQL5.6.4之前,都不能表示小數(shù)。MySQL5.6.4后這兩者都可以包含秒后的小數(shù)部分,精度最高為微妙(6位)

不同:

  • 存儲(chǔ)范圍
    datetime的存儲(chǔ)范圍是1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999,而timestamp的范圍是1970-01-01 00:00:01.0000002038-01-19 03:14:07.999999(準(zhǔn)備的來(lái)講應(yīng)該是UTC范圍);
  • 時(shí)區(qū)
    datetime存儲(chǔ)與時(shí)區(qū)無(wú)關(guān)(準(zhǔn)備來(lái)說(shuō)是datetime只支持一個(gè)時(shí)區(qū),即存儲(chǔ)時(shí)當(dāng)前服務(wù)器的時(shí)區(qū)),而timestamp存儲(chǔ)的是與時(shí)區(qū)有關(guān)。
    MySQL在存儲(chǔ)TIMESTAMP時(shí),會(huì)先將時(shí)間從當(dāng)前服務(wù)器的時(shí)區(qū)轉(zhuǎn)換為UTC(世界協(xié)調(diào)時(shí))以進(jìn)行存儲(chǔ),然后查詢時(shí)從UTC轉(zhuǎn)換為當(dāng)前時(shí)區(qū)以進(jìn)行返回。也就是說(shuō)使用timestamp進(jìn)行存儲(chǔ)的時(shí)間返回的時(shí)候會(huì)隨著數(shù)據(jù)庫(kù)的時(shí)區(qū)而發(fā)生改變。而datetime的存儲(chǔ)則與時(shí)區(qū)無(wú)關(guān),數(shù)據(jù)是什么就存儲(chǔ)什么,也就返回什么
  • 存儲(chǔ)大小
    在5.6.4之前,datetime存儲(chǔ)占用8個(gè)字節(jié),而timestamp是占用4字節(jié);但是在5.6.4之后,由于這兩個(gè)類型允許有小數(shù)部分,所以占用的存儲(chǔ)空間和以前不同;
    MySQL規(guī)范規(guī)定,datetime的非小數(shù)部分需要5個(gè)字節(jié),而不是8個(gè)字節(jié),而timestamp的非小數(shù)部分是需要4個(gè)字節(jié),并且這兩個(gè)部分的小數(shù)部分都需要0到3個(gè)字節(jié),具體取決于存儲(chǔ)值的小數(shù)秒精度

反思

除上面的create_time字段在insert到數(shù)據(jù)庫(kù)時(shí)沒(méi)有設(shè)置系統(tǒng)當(dāng)前時(shí)間,另外還有一個(gè)字段is_delete也有類似問(wèn)題:

is_delete       int(1)      default 0                 null comment '是否刪除 0-未刪除 1-已刪除',

SQLIntegrityConstraintViolationException: Column ‘create_time‘ cannot be null
理論上代碼層面沒(méi)有設(shè)置is_delete時(shí),落到數(shù)據(jù)庫(kù)時(shí)使用default值,即0。

這就很懵逼啊,代碼就那么幾行。

突然發(fā)現(xiàn)使用的時(shí)MyBatis的insert方法,而沒(méi)有使用insertSelective方法。

insert & insertSelective

insert這個(gè)API轉(zhuǎn)化成XML語(yǔ)法如下:

<insert id="insert">
INSERT INTO merchant_app(id,is_delete,create_time) values (#{id,jdbcType=BIGINT}, #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})
</insert>

轉(zhuǎn)換成SQL如下:

INSERT INTO merchant_app(id,is_delete,create_time) VALUES( ?,?,? )

insertSelective這個(gè)API轉(zhuǎn)化成XML語(yǔ)法如下:

insert into HSP_MEDIA_INF
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="isDelete != null" >
        is_delete,
      </if>
      <if test="createTime != null" >
        create_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=BIGINT},
      </if>
      <if test="isDelete != null" >
        #{isDelete,jdbcType=INTEGER},
      </if>
      <if test="createTime != null" >
        #{createTime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>

發(fā)現(xiàn)insertSelective對(duì)應(yīng)的sql語(yǔ)句加入了NULL校驗(yàn),只會(huì)插入數(shù)據(jù)不為null的字段值。insert則會(huì)插入所有字段,會(huì)插入null

INSERT INTO merchant_app(id,is_delete,create_time) VALUES( ?,?,? )

也就是說(shuō),此時(shí)即使數(shù)據(jù)表字段有default定義,遇到MyBatis的insert方法,也無(wú)能為力。

驗(yàn)證

不再使用insert方法,而使用insertSelective方法,同時(shí),把數(shù)據(jù)表的TIMESTAMP類型改回為datetime類型:

alter table merchant_app modify create_time datetime default CURRENT_TIMESTAMP not null comment '創(chuàng)建日期';

可以插入當(dāng)前時(shí)間now()數(shù)據(jù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429768.html

參考

到了這里,關(guān)于SQLIntegrityConstraintViolationException: Column ‘create_time‘ cannot be null的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • 記錄一次es7.8.1報(bào)錯(cuò)解決過(guò)程 unknown key [column] for create index

    記錄一次es的\\\"不清楚\\\"報(bào)錯(cuò) 場(chǎng)景:本地安裝es版本7.8.1,安裝kibana7.8.1,首先啟動(dòng)es,接著啟動(dòng)kibana,創(chuàng)建一個(gè)索引,創(chuàng)建語(yǔ)句如下: 準(zhǔn)備插入一條數(shù)據(jù): 一直百度插入語(yǔ)句的問(wèn)題,創(chuàng)建索引的問(wèn)題,都沒(méi)有找到真正的原因,這個(gè)時(shí)候看到es的后臺(tái)打印日志如下: 報(bào)錯(cuò)如下:[C

    2024年02月11日
    瀏覽(25)
  • 【element UI 中的af-table-column組件】el-table-column如何自適應(yīng)調(diào)整列寬,簡(jiǎn)單高效?。?!

    【element UI 中的af-table-column組件】el-table-column如何自適應(yīng)調(diào)整列寬,簡(jiǎn)單高效?。?!

    在element UI框架中,組件el-table-column代表table的一列,有時(shí)候我們不想讓里面的內(nèi)容換行,網(wǎng)上的方法一般是需要給自適應(yīng)列寬的column寫(xiě)一個(gè)動(dòng)態(tài)的width,比較麻煩。 af-table-column是基于 element-ui 組件庫(kù)的 el-table-column 組件, 支持自適應(yīng)列寬功能 使用前得先導(dǎo)入,對(duì)于第二行“V

    2024年02月08日
    瀏覽(30)
  • el-table-column點(diǎn)擊事件

    el-table-column 的點(diǎn)擊事件是可以通過(guò)在 el-table-column 上使用 \\\"cell-click\\\" 或 \\\"header-click\\\" 事件來(lái)實(shí)現(xiàn)的。具體實(shí)現(xiàn)方法如下: 在 el-table-column 上綁定 \\\"cell-click\\\" 事件:

    2024年02月14日
    瀏覽(30)
  • 鴻蒙Harmony-線性布局(Row/Column)詳解

    鴻蒙Harmony-線性布局(Row/Column)詳解

    人生的下半場(chǎng),做個(gè)簡(jiǎn)單的人,少與人糾纏,多看大自然,在路上見(jiàn)世界,在途中尋自己。往后余生唯愿開(kāi)心健康,至于其他,隨緣就好!? 目錄 一,定義 二,基本概念 三,布局子元素在排列方向上的間距 四,布局子元素在交叉軸上的對(duì)齊方式 4.1 Column容器內(nèi)子元素在水平

    2024年02月01日
    瀏覽(26)
  • HarmonyOS 開(kāi)發(fā)基礎(chǔ)(八)Row和Column

    HarmonyOS 開(kāi)發(fā)基礎(chǔ)(八)Row和Column

    一、Column 容器 1、容器說(shuō)明: 縱向容器 主軸方向:從上到下縱向 交叉軸方向:從左到右橫向 2、容器屬性: justifyContent:設(shè)置子元素在主軸方向的對(duì)齊格式,參數(shù) FlexAlign 枚舉 alignItems:設(shè)置子元素在交叉軸方向的對(duì)齊格式,參數(shù) HorizontalAlign 枚舉 3、參數(shù)說(shuō)明: space:內(nèi)元素

    2024年01月22日
    瀏覽(22)
  • element el-table-column 循環(huán)

    element el-table-column 循環(huán)

    當(dāng)table中表頭太多了,然后不想一個(gè)一個(gè)寫(xiě),可以用循環(huán)的方式寫(xiě) 先上個(gè)圖 直接上代碼 data數(shù)據(jù)

    2024年02月13日
    瀏覽(29)
  • (列置換密碼)(Column Permutation Cipher)(含代碼)

    (列置換密碼)(Column Permutation Cipher)(含代碼)

    密碼學(xué)(在西歐語(yǔ)文中,源于希臘語(yǔ)kryptós“隱藏的”,和gráphein“書(shū)寫(xiě)”)是研究如何隱密地傳遞信息的學(xué)科。在現(xiàn)代特別指對(duì)信息以及其傳輸?shù)臄?shù)學(xué)性研究,常被認(rèn)為是數(shù)學(xué)和計(jì)算機(jī)科學(xué)的分支,和信息論也密切相關(guān)。著名的密碼學(xué)者Ron Rivest解釋道:“密碼學(xué)是關(guān)于如何

    2023年04月17日
    瀏覽(24)
  • MySQL-- ADD COLUMN 添加多個(gè)字段的寫(xiě)法

    MySQL alter 同時(shí)添加多個(gè)字段寫(xiě)法 ALTER語(yǔ)法說(shuō)明: ALTER TABLE 表名 ADD COLUMN 字段名 字段類型 默認(rèn)值 注釋 1 分開(kāi)寫(xiě)多個(gè) alter table 2 只寫(xiě) ADD 不寫(xiě)COLUMN 多個(gè)字段名寫(xiě)到括號(hào)中,用逗號(hào)隔開(kāi) 或者寫(xiě)多個(gè)ADD 3 寫(xiě)COLUMN 其實(shí)就是在2-1的基礎(chǔ)上 加上COLUMN 相對(duì)規(guī)范 寫(xiě)多

    2024年02月06日
    瀏覽(36)
  • Harmony之學(xué)習(xí)Column&Row組件的使用

    Harmony之學(xué)習(xí)Column&Row組件的使用

    一個(gè)豐富的頁(yè)面需要很多組件組成,那么,我們?nèi)绾尾拍茏屵@些組件有條不紊地在頁(yè)面上布局呢?這就需要借助容器組件來(lái)實(shí)現(xiàn)。 容器組件是一種比較特殊的組件,它可以包含其他的組件,而且按照一定的規(guī)律布局,幫助開(kāi)發(fā)者生成精美的頁(yè)面。容器組件除了放置基礎(chǔ)組件外

    2024年02月01日
    瀏覽(18)
  • LeetCode171. Excel Sheet Column Number

    Given a string columnTitle that represents the column title as appears in an Excel sheet, return its corresponding column number. For example: A - 1 B - 2 C - 3 … Z - 26 AA - 27 AB - 28 … Example 1: Input: columnTitle = “A” Output: 1 Example 2: Input: columnTitle = “AB” Output: 28 Example 3: Input: columnTitle = “ZY” Output: 701 Constraints:

    2024年02月19日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包