【问题标题】:how to set default value for text type in mysql如何在mysql中设置文本类型的默认值
【发布时间】:2014-07-16 04:27:44
【问题描述】:
CREATE TABLE IF NOT EXISTS `te` (
  `id` int(30) NOT NULL,
  `name` text NOT NULL,
  `address` text NOT NULL,
  `Aboutus` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这里的表 'te' 包含 4 个字段 id、名称、地址、Aboutus、Aboutus 是可选的,这意味着我如何通过 phpmyadmin sql 将默认文本更新到 db 中的配置文件

【问题讨论】:

  • 你想从网页做同样的事情还是什么?
  • 网页,但有没有办法为该字段执行默认文本,例如为整数定义@Ullas
  • 这意味着如果用户不填写该字段,默认文本应该在数据库仪式中更新?
  • No BLOB/TEXT 列不能有默认值你可能需要创建一个触发器
  • 是的,正如@MKhalidJunaid 所说。找到了stackoverflow.com/questions/3466872/…

标签: mysql sql


【解决方案1】:

对于 Ubuntu 16.04:

如何在 MySQL 5.7 中禁用严格模式:

编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf

如果mysql.cnf中存在下一行

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后替换为

sql_mode='MYSQL40'

否则

只需在 mysqld.cnf 中添加以下行

sql_mode='MYSQL40'

这解决了问题。

【讨论】:

    【解决方案2】:

    我已将 about us 字段的 not null 更改为 null

    CREATE TABLE IF NOT EXISTS `te` (
      `id` int(30) NOT NULL,
      `name` text NOT NULL,
      `address` text NOT NULL,
      `Aboutus` text NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    这是你的触发器BEFORE INSERT

    CREATE TRIGGER new_insert
    BEFORE INSERT ON `te`
    FOR EACH ROW 
    SET NEW.`Aboutus` = CASE WHEN NEW.Aboutus IS NULL THEN 'Not Updated' ELSE NEW.Aboutus END
    ;
    

    插入不带Aboutus

    INSERT INTO `te` (`id`, `name`, `address`) 
    VALUES (1, 'name', 'address') ;
    

    插入Aboutus

    INSERT INTO `te` (`id`, `name`, `address`, `Aboutus`) 
    VALUES (2, 'name', 'address', 'Aboutus') ;
    

    通过传递 null Aboutus 插入

    INSERT INTO `te` (`id`, `name`, `address`, `Aboutus`) 
    VALUES (3, 'name', 'address', null) ;
    

    Demo

    编辑由于@garethD 指出了更新场景的案例,您还需要在BEFORE UPDATE 上使用另一个触发器,因此如果更新中出现null,则aboutus 应更新为Not Updated

    CREATE TRIGGER update_trigger
    BEFORE UPDATE ON `te`
    FOR EACH ROW 
    SET NEW.`Aboutus` = CASE WHEN NEW.Aboutus IS NULL THEN 'Not Updated' ELSE NEW.Aboutus END
    ;
    
    UPDATE te
    SET AboutUs = NULL;
    

    Demo 2

    【讨论】:

    • +1,它还需要一个触发器来处理更新,以阻止某人运行UPDATE te SET AboutUs = NULL;
    • @GarethD 感谢您指出这样一个错误,我还没有真正考虑过更新方案,再次感谢
    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 2018-01-14
    • 2017-02-06
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多