1. 程式人生 > >MySQL資料庫datetime型別不能為空字串的問題

MySQL資料庫datetime型別不能為空字串的問題

這幾天做MySQL資料轉移的時候出現問題,本地用的是MySQL 4.1,現在要移植到MySQL 5.5上。庫指令碼匯入之後,發現更新資料的時候不報錯,但是資料更新不成功,苦苦努力才發現datetime型別出了問題,程式裡面給datetime型別的一個欄位是一個空字串,因此報錯。奇怪的是,我把同樣的SQL語句發給MySQL公司的人,他們可以正常執行,只是報出一個Warning。

     經過大量的查詢資料後發現,問題出現my.ini裡面的sql-mode的設定上,sql-mode預設為"STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",這裡把STRICT_TRANS_TALBES去掉之後,重啟MySQL,就OK了。

     STRICT_TRANS_TABLES的工作方式:
     · 對於事務性儲存引擎,在語句中任何地方出現的不良資料值均會導致放棄語句並執行回滾。
     · 對於非事務性儲存引擎,如果錯誤出現在要插入或更新的第1行,將放棄語句。(在這種情況下,可以認為語句未改變表,就像事務表一樣)。首行後出現的錯誤不會導致放棄語句。取而代之的是,將調整不良資料值,並給出告警,而不是錯誤。換句話講,使用STRICT_TRANS_TABLES後,錯誤值會導致MySQL執行回滾操作,如果可以,所有更新到此為止。

     當然,如果想要執行嚴格的檢查,請啟用STRICT_TRANS_TABLES,那樣的話,就得修改程式,把給datetime型別的空字元修改成"0000-00-00 00:00:00"即可。

相關推薦

MySQL資料庫datetime型別不能字串的問題

這幾天做MySQL資料轉移的時候出現問題,本地用的是MySQL 4.1,現在要移植到MySQL 5.5上。庫指令碼匯入之後,發現更新資料的時候不報錯,但是資料更新不成功,苦苦努力才發現datetime型別出了問題,程式裡面給datetime型別的一個欄位是一個空字串,因此

mysql查詢欄位字串時給預設值 (2、null時給一預設值)

1、 case when post_ask_pay.price='' then 10 else post_ask_pay.price end as priceSELECT distinct post_ask_pay.user_id as ask_user_id,post_

mysql 資料庫時間型別 datetime 資料在頁面上顯示一串數字, 用函式date_format( )轉換格式 ;

            mysql 資料庫時間型別 datetime 轉換格式 資料庫時間欄位datetime可以使用date_format( )函式進行時間的轉換。 資料庫時間欄位型別:  資料庫查詢結果: 沒轉換前頁面顯示的時間資料: 頁面顯示我是用

mybatis當傳入資料型別Int時並且值0時,會判斷字串

一般在mybatis中插入或者修改時,會將欄位做非null和非空判斷,如下所示:<if test="operatype_enum != null and operatype_enum != ''">operatype_enum =#{operatype_enum}

java中儲存mysql資料庫時間型別【date、time、datetime、timestamp】

在mysql中對於時間的儲存自己見表的時候都是設定的varchar型別的,感覺挺方便的。 昨天拿別人建好的表寫程式碼,發現這張表中時間型別為datetime的,憑感覺試了一下不行,網上查了剛開始試了好幾個都是不對的,一臉懵逼。 -----------------------

原來boolean不能初始化為和對應於mysql資料庫型別與存取

  最經在做一個專案用一個表中有一個性別的屬性用tinyint(1)對應與 java中的Boolean。但是當我用反射來將result中的資料反射成物件並賦值的時候發現報IllegalArgument

JDBCMySql新增datetime型別的欄位資料

當PreparedStatement物件使用setDate()方法來新增日期時間型別的資料時,Date型別的值只有日期,時間預設為0。所以使用此方法為mysql新增datetime型別的資料,時間均為00:00:00。 可以使用setTimestamp()方法來新增date

SpringMVC統一轉換null值字串的方法 !

  在SpringMVC中,可以通過在<mvc:annotation-driven>中配置<mvc:message-converters>,把null值統一轉換為空字串,解決這個問題。下面以JSon互動的方式為例說明如何實現: 第一步:建立一個Objec

mysql插入datetime型別報錯問題解決

sql = "insert into datalist(`name`,datetime) VALUES (%s,str_to_date(%s,'%%Y-%%m-%%d %%h:%%i:%%s'))"注意時間格式化:'%%Y-%%m-%%d %%h:%%i:%%s'str_to_date:是mysql自帶的字串

如何判斷int資料型別

法一: 在不改變資料庫結構的前提下(假設你的資料是從資料庫讀取,而不是自己在程式碼中定義)。那麼可以通過折中的方法來判斷: 1 先通過 String.valueOf(int型別資料) 轉換成String型別; 2 使用if(){ } 判斷“null” || "0" 是否匹配你要判斷的i

java後臺date轉換到mysqldatetime型別的方法

mysql中儲存時間(date)型別,一般用datetime。所以java後臺把當前時間或者固定時間傳參的時候,也需要轉換為時間戳型別。只有這樣 時:分:秒 會正常顯示數值,也不會出現秒的後面多一個 .0 的情況。 News news= new News(); java.uti

mysql資料庫----資料型別

一、數值型別 1、整型 整數型別:TINYINT SMALLINT MEDIUMINT INT BIGINT 我們完全沒必要為整數型別指定顯示寬度,使用預設的就可以了 預設的顯示寬度,都是在最大值的基礎上加1   2、浮點型  浮點型:FLOAT DOUBLE 定點數:

mysql執行計劃id—UNION關鍵字

簡介   UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。例如,我有兩個表,表1記錄的是公司男員工的資料,包括年齡、姓名、職位。表2記錄的是公司女員工的資料,包括姓名、家庭住址、手機號等欄位。這時,我們想要根據一定條件,查詢兩個表的姓名的集合。就會用到 UNION 關鍵字。   UNIO

mysql資料庫cha型別的部分理解

轉載 http://www.ganecheng.tech/blog/52316408.html  我在建庫時發現  定義了編碼格式utf8  但是CHAR(2),可以存放2個漢字 ,字母也是2個,所以引出下文. MySQL資料型別  含義 char 固

fastjson序列化將Null設定字串""等問題

fastjson序列化將Null設定為空字串""等問題 Spring Boot使用FastJson解析JSON資料的方法 Spring Boot預設使用json格式從後臺返回資料給前臺,當返回的String型別或者List<>型別資料為null時,我們希望返回的是""

netcore webapi返回json中null全域性替換字串

場景:資料庫中部分表字段允許空值,則程式碼中實體類對應的欄位型別為可空型別Nullable<>,如int?,DateTime?,null值欄位序列化返回的值都為null,前端對應欄位賦值需要做null值判斷,隨想到全域性把null替換為"" 網上找的方案都是重寫

mybatis查詢資料庫返回結果

用mybits查詢資料庫時,如果引數已傳入sql,sql也已經執行了,但是返回結果為空,首先保證資料庫中有對應資料,如果有對應資料仍返回null,是資料庫配置檔案有問題。解決方案如下: 1、mapper.xml檔案加入<resultMap>對映,column是資

mysql show master status

問題 執行show master status,輸出結果為空: mysql> show master status; Empty set (0.00 sec) 原因 mysql沒有開啟日誌。 檢視log_bin選項: mysql> show variables like '%log_bi

DB中欄位null,字串空格要怎麼過濾取出有效值

比如要求取出微信繫結的,沒有解綁的 未繫結,指定欄位為null 繫結的,指定欄位為某個字串 解綁的,有的客戶用的是更新指定欄位為1,有的客戶更新指定欄位為‘1’ 髒資料的存在,比如該欄位為空字串 髒資料的存在,比如該欄位為空格 要怎麼過濾出來? 解綁後指定欄位更新為‘1’ 取出繫結的會員,假設欄位是aa

R中mysql資料庫datetime格式查詢

current_day <- as.character(ISOdate(2015,4,17)) # 格式轉換 sql <- paste("select * from SH WHERE