欢迎访问 生活随笔!

生活随笔

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

数据库

mysql select null 0,查询值中为NULL,在MySQL中产生0.00

发布时间:2023/12/2 数据库 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql select null 0,查询值中为NULL,在MySQL中产生0.00 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我有一个动态编写的查询(通过Joomla的OO PHP)将一些值插入MySQL数据库.用户填写的表单上有一个字段用于金额,如果它们留空,我希望进入系统的值为NULL.我已经将错误日志中的查询写出来了;这是查询的样子:

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','')

但是,当我查看数据库表时,虽然ActivatedDT正确设置为NULL,但BalanceInit和BalanceCurrent都是0.00. ActivatedDT字段是日期时间,而另外两个是十进制(18,2),并且所有三个都在表结构中设置为默认值NULL.

如果我运行这样的查询:

UPDATE arrc_Voucher

SET BalanceInit = null

WHERE BalanceInit like "0%"

…它确实将值设置为null,那么为什么初始插入查询不这样做呢?是因为null在引号中吗?如果是这样,为什么ActivatedDT设置正确?

解决方法:

删除NULL周围的引号.实际发生的是它试图将字符串’NULL’作为数字插入,并且因为它无法转换为数字而使用默认值0.

至于为什么ActivatedDT有效,我猜这是一个日期字段.未能字符串转换成日期通常会导致其值设置为0(被格式化为像“1969-12-31”),但如果你已经启用了NO_ZERO_DATE模式,那么它将被设置为NULL而不是.

如果您想的MySQL抛出一个错误在这样的情况下,当无效值传递,您可以设置STRICT_ALL_TABLES或STRICT_TRANS_TABLES(请确保您了解它们之间的区别的部分)仿真模式中的一种,如TRADITIONAL或.

你可以用命令SET的sql_mode =“传统”,或者在my.cnf中添加SQL模式=“传统”的尝试.

标签:mysql,sql,null

来源: https://codeday.me/bug/20190717/1483816.html

总结

以上是生活随笔为你收集整理的mysql select null 0,查询值中为NULL,在MySQL中产生0.00的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。