mysql select null 0,查询值中为NULL,在MySQL中产生0.00
我有一個動態(tài)編寫的查詢(通過Joomla的OO PHP)將一些值插入MySQL數(shù)據(jù)庫.用戶填寫的表單上有一個字段用于金額,如果它們留空,我希望進(jìn)入系統(tǒng)的值為NULL.我已經(jīng)將錯誤日志中的查詢寫出來了;這是查詢的樣子:
INSERT INTO arrc_Voucher
(VoucherNbr,securityCode,sequentialNumber, TypeFlag, CreateDT, ActivatedDT, BalanceInit, BalanceCurrent, clientName)
VALUES
('6032100199108006', '99108006','12','V','2010-10-29 12:50:01','NULL','NULL','NULL','')
但是,當(dāng)我查看數(shù)據(jù)庫表時,雖然ActivatedDT正確設(shè)置為NULL,但BalanceInit和BalanceCurrent都是0.00. ActivatedDT字段是日期時間,而另外兩個是十進(jìn)制(18,2),并且所有三個都在表結(jié)構(gòu)中設(shè)置為默認(rèn)值NULL.
如果我運行這樣的查詢:
UPDATE arrc_Voucher
SET BalanceInit = null
WHERE BalanceInit like "0%"
…它確實將值設(shè)置為null,那么為什么初始插入查詢不這樣做呢?是因為null在引號中嗎?如果是這樣,為什么ActivatedDT設(shè)置正確?
解決方法:
刪除NULL周圍的引號.實際發(fā)生的是它試圖將字符串’NULL’作為數(shù)字插入,并且因為它無法轉(zhuǎn)換為數(shù)字而使用默認(rèn)值0.
至于為什么ActivatedDT有效,我猜這是一個日期字段.未能字符串轉(zhuǎn)換成日期通常會導(dǎo)致其值設(shè)置為0(被格式化為像“1969-12-31”),但如果你已經(jīng)啟用了NO_ZERO_DATE模式,那么它將被設(shè)置為NULL而不是.
如果您想的MySQL拋出一個錯誤在這樣的情況下,當(dāng)無效值傳遞,您可以設(shè)置STRICT_ALL_TABLES或STRICT_TRANS_TABLES(請確保您了解它們之間的區(qū)別的部分)仿真模式中的一種,如TRADITIONAL或.
你可以用命令SET的sql_mode =“傳統(tǒng)”,或者在my.cnf中添加SQL模式=“傳統(tǒng)”的嘗試.
標(biāo)簽:mysql,sql,null
來源: https://codeday.me/bug/20190717/1483816.html
總結(jié)
以上是生活随笔為你收集整理的mysql select null 0,查询值中为NULL,在MySQL中产生0.00的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java+解析占位符,如何告诉Sprin
- 下一篇: Spring JPA数据+Hiberna