首页 > 解决方案 > mysql 字段 'col1' 没有默认值

问题描述

我的数据库模式定义如下

CREATE TABLE `ATestTable` (
    id bigint(20) NOT NULL AUTO_INCREMENT,
    refId varchar(32) NOT NULL,
    col1 text COLLATE utf8_unicode_ci NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_keyy_refId` (`refId`)
) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

当我有这样的事情时

Insert into ATestTable (refId, col1) Values ('abc', 'def');

我得到了错误Field 'col1' doesn't have a default value。我在网上搜索了这个错误应该发生在没有为这个 NOT NULL 列指定值时。但我确实指定了值。我什至在我的本地数据库上尝试了相同的插入脚本,它可以工作。那么它是数据库服务器配置的事情吗?

我跑show variables like '%sql_mode%'了,一个不起作用的是NO_ENGINE_SUBSTITUTION。我的本地数据库(有效)给了我ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

标签: mysql

解决方案


您可以尝试两种方法,另一种方法是解决您的问题

1)您可以通过运行此查询来更改 sql 模式以匹配您的本地数据库模式

    SET GLOBAL sql_mode = 'modes';  

用逗号分隔的模式。请注意,如果只有您具有管理权限,这将起作用。如果不使用

    SET SESSION sql_mode = 'modes'; 

这只会影响当前的客户端。

2) 为 Col1 设置一个默认值(例如:空文本),触发器无论如何都会更新该值

   CREATE TABLE `ATestTable` (
   id bigint(20) NOT NULL AUTO_INCREMENT,
   refId varchar(32) NOT NULL,
   col1 text COLLATE utf8_unicode_ci DEFAULT ' ' not.  
   NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `unique_keyy_refId` (`refId`)
   ) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT.    
   CHARSET=utf8 COLLATE=utf8_unicode_ci;

推荐阅读