【问题标题】:Set default value if empty string is passed如果传递空字符串,则设置默认值
【发布时间】:2017-11-26 18:17:26
【问题描述】:

我正在努力寻找解决方案来实现以下结果。

如果 MySQL 查询有空字符串 '',则使用表模式中定义的默认值。

例如

INSERT INTO `users`(`name`,`nickname`,`balance`) 
VALUES ('hello','world','');

在这种情况下,如果余额列的默认值为0,那么应该设置它而不是空字符串。

有没有可能做到这一点?

【问题讨论】:

    标签: mysql schema


    【解决方案1】:

    更好的方法是创建触发器。在Mysql documentation 上阅读有关触发器的更多信息。更多细节的类似答案可以在here找到。

    对于这个问题,这里是我对触发器的实现。

    delimiter #
    create trigger nonEmptyString
    before insert
    on users
    for each row
    
    BEGIN
    IF NEW.balance = '' THEN
       SELECT COLUMN_DEFAULT INTO @def
       FROM information_schema.COLUMNS
       WHERE
         table_schema = 'Schema Name'
         AND table_name = 'users'
         AND column_name = 'balance';
       SET NEW.balance = @def;
    END IF;
    
    end#
    
    delimiter ;
    

    注意:将 Schema Name 替换为您的架构名称。

    【讨论】:

    • 你可以使用DATABASE()函数代替Schema Name
    【解决方案2】:

    使用变量(例如 $balance)而不是 ''(我希望您无论如何都会这样做)。

    在查询前一行:

    if(strlen(trim($balance))==0){ $balance='0'; }
    

    您也可以使用 mysql 的 case 语法,虽然有点笨拙,但非常适合您的描述。

    MySQL update CASE WHEN/THEN/ELSE

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2016-01-02
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多