mysql - 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
解决方案
您可以尝试两种方法,另一种方法是解决您的问题
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;
推荐阅读
- android - 从 Firestore 中删除后,文档在视图中仍然可用
- javascript - 我怎么知道一个
- c++ - 为什么在这种情况下使用范围 for 循环会产生与使用常规 for 循环不同的输出?
- linux - 以编程方式检测物理内核的数量
- excel - 将剪贴板内容(表格)粘贴到 HTML 正文
- jquery - 停止 JQuery 脚本执行
- java - 如何在android studio上“保存”当前布局?
- angular - 如何在Angular 7中检查输入字段是否处于焦点
- flutter - 将 int32 转换为 dart 中的字节列表
- javascript - Javascript 函数调用错误:htmlspecialchars() 期望参数 1 为字符串,给定数组