当前位置: 首页 > 面试题库 >

查询值为NULL,导致MySQL中为0.00

吴品
2023-03-14
问题内容

我有一个动态编写的查询(通过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_TABLESSTRICT_TRANS_TABLES(确保您已阅读有关它们之间差异的部分)或一种仿真模式,例如TRADITIONAL

你可以用命令试试这个SET sql_mode='TRADITIONAL',或者通过增加sql- mode="TRADITIONAL"my.cnf



 类似资料:
  • 问题内容: 我正在运行一个非常简单的查询,但是对于某些结果,一个字段中的值为空。如果该值为null,如何将其设置为“字符串”? 就像是 它将在sql server 2005上运行 谢谢 问题答案: 使用以下内容: 或@Lieven指出: COALESCE的动态之处在于您可以定义更多的参数,因此,如果第一个为null,则获取第二个参数,如果第二个为null,则获取第三个,依此类推…

  • 我正在创建一个spring cloud Kafka流应用程序。我有一个输入主题和一个输出主题,我试图使用KStream.map函数对输入主题应用KStream键值转换操作 问题如果转换后的值为null,该函数将抛出IllegalArgumentException 我的问题是: 1:异常的原因?尽管文档中说:“忽略具有空键或空值的输入记录” 2:处理无状态/有状态操作中异常的最佳实践?一个try/c

  • 问题内容: 是否可以执行这样的mysql查询? 我需要在一般的“ where”子句中使用子查询的结果。 问题答案: 您可以将其包装在子查询中,如下所示:

  • 我有以下代码: 为什么我对布尔变量“bool”的检查会导致异常?当它“看到”if语句不是真的时,它难道不应该跳过if语句吗?当我移除if语句或检查它是否为空时,异常就会消失。

  • 问题内容: 我希望将值设置为如果我提交的表单中的文本框未放入任何内容。我怎样才能做到这一点?我尝试插入,但这只是将单词添加到字段中。 我不确定应该为此提供什么代码,我只是在编写UPDATE查询。 问题答案: 不要在更新语句中加引号。这应该工作:

  • 补充: temp是别名,我截图截错了; plan_start_time 是varchar类型 SELECT STR_TO_DATE(plan_start_time, '%h:%i:%s') as temp ,plan_start_time from base_stop_calendar