首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL:当指定了错误的枚举值时,禁止插入空字符串

基础概念

在MySQL中,枚举(ENUM)是一种特殊的数据类型,允许你定义一个列,该列只能包含预定义的值列表中的一个。当你尝试向一个ENUM列插入一个不在这个列表中的值时,MySQL会拒绝这个操作,并且通常会返回一个错误。

相关优势

  1. 数据完整性:ENUM确保列中的值只能是预定义的集合之一,从而维护了数据的准确性。
  2. 空间效率:ENUM列在存储上比VARCHAR或CHAR更节省空间,因为它们使用数字索引来表示每个值。
  3. 查询优化:MySQL可以对ENUM列进行优化,因为它们的值集是固定的。

类型与应用场景

  • 类型:ENUM是一种字符串对象,它在内部以整数形式存储,但显示为字符串。
  • 应用场景:适用于那些字段的值是有限且固定的选项集合,如性别(男/女)、状态(启用/禁用)等。

遇到的问题及原因

当你尝试向ENUM列插入一个空字符串('')时,如果这个空字符串不在ENUM的定义中,MySQL将不允许这种插入。这是因为ENUM的设计初衷就是限制列的值必须是预定义的集合之一。

解决方法

如果你希望允许空值,可以在ENUM定义中添加一个空字符串作为有效值,或者在创建表时将该列定义为允许NULL值。

示例代码

代码语言:txt
复制
-- 创建一个允许空字符串的ENUM列
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    status ENUM('active', 'inactive', '') NOT NULL
);

-- 插入数据,包括空字符串
INSERT INTO example (status) VALUES ('active'), ('inactive'), ('');

-- 如果你想允许NULL值而不是空字符串
CREATE TABLE example_with_null (
    id INT AUTO_INCREMENT PRIMARY KEY,
    status ENUM('active', 'inactive') NULL
);

-- 插入数据,包括NULL值
INSERT INTO example_with_null (status) VALUES ('active'), ('inactive'), (NULL);

通过这种方式,你可以灵活地处理ENUM列中的空值情况,无论是通过允许空字符串还是NULL值。

相关搜索:如何修复插入枚举值时“无法推断用于枚举实例的SQL类型”错误?为什么Apollo客户端在所有字段的表中插入空值,即使已经指定了值?当字段值乘以数字时,MySQL选择错误的结果仅当mysql中提供了特定的相关值时,才选择记录当提供了所需的值,但mongoose无法识别时,如何修复mongoose验证器错误当指定了未定义的路由时,如何使react路由器直接指向我的错误页面?404当url具有类似json的查询字符串值时出现错误仅当子表中的外键在父表中指定了值时,才在子表中创建条目插入到MySQL时在数据库表上获取错误的BLOB值错误:当字符串不为空时,必须在React Native中的<Text>组件内呈现文本字符串MyPy给出了“不兼容的类型"auto";当使用auto()和从字符串继承的枚举时,应出现" str”“错误当传递0秒字符串并从值中减去时,如何避免MYSQL CONVERT()方法出现错误?可捕获的致命错误:当尝试插入数据库时​​,类stdClass的对象无法转换为字符串将数据插入我的Postgres数据库时出现问题,错误:当实际值为零时,列"xyz“缺少数据当iam尝试从springboot中的Mysql数据库获取数据时,iam收到以下错误:“给定的id不能为空”当IDENTITY_INSERT设置为OFF时,EF核心给我错误,无法为表'Tags‘中的标识列插入显式值当列标题与字符串匹配并且该列中的单元格包含指定值时,显示选项卡中的行ASP.net MVC错误:当IDENTITY_INSERT设置为OFF时,无法为表'Company‘中的标识列插入显式值当标识的值是一个字符串时,如何解决'invalid literal for int() with base 10‘错误
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL枚举类型enum字段在插入不在指定范围的值时, 是否是”插入了enum的第一个值”?…「建议收藏」

刚刚在看MySQL>>一书的”ENUM类型”一节, 以下面的代码举例, 得出结论: “还可以看出对于不在ENUM指定范围内的值时, 并没有返回警告, 而是插入了enum(‘M’, ‘F’)的第一个值...这个相当于是一个警告信息,在我本地测试的 5.7 中,直接插入会报错,但是使用 ignore 后,数据能被强制插入,但是是空值。...INSERT ignore INTO user (sex) VALUES (5); 在服务器使用 MySQL 5.5 测试 无论是否添加 ignore 数据都能被插入,但是是空值。...在 MySQL 枚举类型的“八宗罪” 这篇文章的第七条,文中提到了,如果不合法会被处理成空字符串,在后一段中又提到了因为类型的缘故,会根据枚举索引去取值。...总结:报错跟版本有关,5.5版无论是否添加igonre都可以插入,但是空值; 5.7版本添加ignore可以插入,但是空值; 不添加直接报错”ERROR 1265 (01000): Data truncated

1.8K20

MySQL sql_mode的坑及严格模式详解

官方文档建议:当使用innodb存储引擎表时,考虑使用innodb_strict_mode模式的sql_mode,它能增量额外的错误检测功能。...ERROR_FOR_DIVISION_BY_ZERO :如果这个模式未启用,那么零除操作将会插入空值并且不会产生警告;如果这个模式启用,零除操作插入空值并产生警告;如果这个模式和严格模式都启用,零除从操作将会产生一个错误...NO_AUTO_CREATE_USER :禁止grant语句自动创建用户,除非认证信息被指定,语句必须包含一个非空的密码使用identified by或使用认证插件identified with....NO_AUTO_VALUE_ON_ZERO : 这个值影响自增列,正常情况下可以通过插入“0”值或者null空值来生成自增序列的下一个值。...NO_AUTO_VALUE_ON_ZERO模式会抑制这种行为,仅仅当插入null值才会生成下一个序列的自增值。这个模式是非常有用的当0值已经在表的自增序列中存储时。

2.7K20
  • MySQL中的字段约束 null、not null、default、auto_increment

    MySQL默认情况下指定字段为NULL修饰符,如果一个字段指定为NOT NULL,MySQL则不允许向该字段插入空值(这里面说的空值都为NULL),因为这是“规定”。...向这些字段中插入NULL值将会导致插入下一个自动增加的值或者当前的时间戳。 DEFAULT 修饰符: 可以使用DEFAULT修饰符为字段设定一个默认值。...当插入记录时,您老人家忘记传该字段的值时,MySQL会自动为您设置上该字段的默认值。 如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。...如果指定字段可以为NULL,则MySQL为其设置默认值为NULL。...如果是NOT NULL字段,MySQL对于数值类型插入0,字符串类型插入空字符串,时间戳类型插入当前日期和时间,ENUM类型插入枚举组的第一条。

    5.6K20

    已解决错误代码: IllegalArgumentException(非法参数异常):当传递给方法的参数不满足预期时,比如传入了无效的参数或空值,容易引发此异常

    已解决错误代码: IllegalArgumentException(非法参数异常):当传递给方法的参数不满足预期时,比如传入了无效的参数或空值,容易引发此异常 已解决错误代码: IllegalArgumentException...; } // 进行图像旋转操作的代码 // ... } 通过上述代码,我们在图像旋转方法中添加了参数检查,当输入的角度值不在合法范围内时,抛出自定义的 IllegalArgumentException...异常,并提示用户输入有效的角度值。...总结: 在本文中,我们解决了图像处理应用程序中出现的 IllegalArgumentException 异常问题。...通过添加合适的参数检查和验证,我们确保了用户输入的角度值在合法范围内,从而有效地避免了异常的发生。在开发过程中,合理处理参数是保证应用程序稳定性的重要一环,这也是我们在开发中需要特别注意的地方。

    24710

    MySQL-2

    有很多种方法可以指定浮点列所需要的精度,这使得MySQL会选择不同的数据类型或在存储时对值进行取舍。这些精度定义是非标准的,所以建议只指定数据类型而不指定精度。...CHAR类型时定长的:MySQL总是根据定义的字符串的长度分配足够的空间。当存储CHAR值时,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。...MySQL服务器,操作系统以及客户端连接都有时区的设置。默认情况下,若插入时没有指定第一个TIMESTAMP列的值,MySQL则设置这个列的值为当前时间。TIMESTAMP列默认为NOT NULL。...MySQL限制了每个关联操作最多只有61张表。单个查询最好在12个表以内做关联。 全能的枚举:防止过度使用枚举。...加快alter table 的操作速度 MySQL执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查处所有数据插入新表,然后删除旧表。

    82110

    Java后端开发规范(基于阿里开发规范)

    3) 获取统计值的方法用 count 做前缀。 4) 插入的方法用 save/insert 做前缀。 5) 删除的方法用 remove/delete 做前缀。...【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起, 便于阅读。 【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。...十、MySQL数据库 建立表规约 【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字。...【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度即可。...【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为NULL. 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

    86621

    MySQL的复杂数据类型,学会使用再也不怕复杂场景了、枚举(ENUM)、集合(SET)、JSON、空间数据类型

    数据安全性:枚举类型可以限制列的取值范围,确保只有预定义的值被插入。 数据存储优化:枚举类型只存储整数值而不是字符串,从而节省存储空间。...存储效率:ENUM值在MySQL中以整数形式存储,空间占用非常少,尤其当枚举值数量较少时,存储效率高。...索引限制:虽然可以对JSON列进行索引,但索引的使用受限于JSON路径表达式。 数据验证:虽然MySQL会自动验证JSON数据的有效性,但错误的数据插入仍然可能导致应用错误。...JSON类型的特性和注意事项 数据验证 MySQL会自动验证插入到JSON列的数据是否为有效的JSON格式。如果数据不是有效的JSON,MySQL将拒绝插入并返回错误。...空值:空间列可以包含 NULL 值,表示没有存储任何空间数据。 函数和操作符:MySQL 提供了丰富的空间函数和操作符来处理空间数据,包括计算距离、面积、周长、判断空间关系(如相交、包含等)等。

    17110

    MySQL基础『数据类型』

    字符,用空格填充字符串到指定的长度 VARCHAR(SIZE) 可变长度字符串,最大支持 65535 字符,它不会用空格填充 BLOB 二进制数据 TEXT 大文本,不支持全文索引、默认值,需要注意有一些变体...,表示枚举类型,只能选取其中一个值,由于在某些数据库系统中的限制,ENUM 的使用有时会受到争议 SET 字符串对象,表示集合类型,可以选取零个或多个值 创建一个数据库 dataType mysql...这是因为 当小数部分不足时,MySQL 自动补齐,补齐后,实际插入的值为 -100.00,有五位数,超出范围,自然就被拦截了 MySQL 也并非是铁面无私,当我们插入的数据小数部分超过指定精度时,MySQL...char 被称为 固定长度字符串,不过这个字符串也是有 约束 的,当实际插入的字符串长度超过 char 的固定长度时,插入操作会被拦截,并且 char 支持的最大长度为 255,大于 255 的字符串注定不能使用...向其中插入值时,只能选择枚举中已经存在的元素,并且只能选择一个 mysql> insert into votes values ('张三', '男'), ('小红', '女'); mysql> select

    22010

    【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)

    当插入超出取值范围的数据时,MySQL会拦截,不允许插入。...该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值; 而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个; 当我们添加枚举值时...当 enum 枚举类型在插入的时候,可以直接写这个枚举限定的常量,也可以写对应常量的下标 如下:这个数字下标从1开始,分别代表第一个枚举值,第二个枚举值等。...,需要声明该列名字来进行匹配,否则不然就会上面第一行的错误 某列设置了 not null 必须要插具体值,不插因为后面没有默认值就报错,而且插入null也报错 设置默认为 null ,可以不插用的是后面带的默认值...3.2 默认值(default) default:当插入数据时,如果未指定该列的值,将使用默认值。 通过默认值,可以简化数据插入操作,提高数据一致性。

    3600

    Spring学习笔记(二十一)——规范开发:SpringBoot表单验证、AOP切面编程、统一返回结果和异常处理

    简单的事务处理 业务需求:当插入两条数据时,插入第一条数据时成功,插入第二条数据时出现了问题,需求时保证两条数据必须同时插入,或者同时回滚不插入。...@Future 限制必须是一个将来的日期 @Max(value) 限制必须为一个不大于指定值的数字 @Min(value) 限制必须为一个不小于指定值的数字 @Pattern(value...) 限制必须符合指定的正则表达式 @Size(max,min) 限制字符长度必须在min到max之间 @Past 验证注解的元素值(日期类型)比当前时间早 @NotEmpty 验证注解的元素值不为...null且不为空(字符串长度不为0、集合大小不为0) @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格...,在建立一个枚举类ResultEnums.java,用来统一枚举可能发生的异常和错误码。

    69110

    MySQL必须知道的点!

    同时在status这类字段上标注:0表示删除,1表示正常 等枚举值。 3.必须使用UTF8mb4字符集 utf8是通用的字符集,mb4 在utf8上进行了扩展,支持emoj等新的字符。...c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识。...c)varchar可以支持模糊查询,例如:like“138%” 12.禁止使用ENUM,可使用TINYINT代替 a)增加新的ENUM值要做DDL操作 b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串...因为MySQL优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加MySQL优化器生成执行计划的时间,同样会降低查询性能...(3)建立组合索引,必须把区分度高的字段放在前面 理由:能够更加有效的过滤数据 14.关于SQL使用规范 (1)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性

    70530

    mysql 分区 varchar_MySQL分区总结

    可以使用 values less than maxvalue 设置分区,超出明确指定的分区值时,数据会存储在该分区,如: MySQL支持在 values less than 字句中使用表达式 partition...Range分区特别使用的两种情况: 1、当需要删除过期的数据时,只需要简单的 ALTER TABLE emp DROP PARTITION p0 来删除p0分区中的数据,对于具有上百万条记录的表来说,删除分区要比运行一个...分区支持使用 Blob 或 Text 类型外其他类型的列作为分区键 创建 Key 分区表的时候,可以不指定分区键,默认会首先选择使用主键作为分区键 在没有主键的情况,会选择非空唯一键作为分区键,分区键的唯一键必须是非空的...附:MySQL 分区的 null 值处理 1、MySQL 分区不禁止在分区键值上使用 null 2、Range 分区中,null 值会被当做最小值来处理 3、List 分区中,null 值必须出现在枚举列表中...,否则不被接受 4、Hash/Key 分区中,null 值会被当做零值来处理 5、为了避免在处理 null 值时出现误判,推荐通过设置字段非空和默认值来绕开 MySQL 对 null 值的默认处理 发布者

    3.3K20

    【数据库】MySql的sql_mode模式说明

    TRADITIONAL模式 :严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。...(测试的时候,数据时原样插入的,没有转换为0000-00-00)ANSI_QUOTES :启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符。...:禁止grant语句自动创建用户,除非认证信息被指定,语句必须包含一个非空的密码使用identified by或使用认证插件identified with.NO_AUTO_VALUE_ON_ZERO...NO_ENGINE_SUBSTITUTION :此模式指定当执行create语句或者alter语句指定的存储引擎没有启用或者没有编译时,控制默认默认存储引擎的自动切换。默认是启用的。...举个例子,当将’14:52:12.15’插入到time(1)的时候,是插入’14:52:12.2’还是插入’14:52:12.1′当为OFF时,进行四设五入,插入14:52:12.2;当为ON时,舍弃多余的位数

    1.7K50

    MySQL 快速入门(一)

    基本数据类型 数值类型 日期和时间类型 字符串类型 枚举与集合类型 MySQL快速入门(一) 简介 存储数据的演变过程 数据的存储通过我们自己编写来决定,存到文件的样式千差万别 软件开发目录规范规定了文件的位置..., manager FROM employee WHERE manager = NULL; # 这是错误的 这个错误的原因在于将一个值与一个未知的值进行数学比较,结果仍然未知;即使是将两个空值进行比较...= NULL; 如果表达式 expression 的值为空,IS NULL 返回真,IS NOT NULL 返回假;如果表达式的值不为空,IS NULL 返回假,IS NOT NULL 返回真; select...版本之后默认开启了严格模式,规定多少宽度,就插入多少数据,超出报错 约束条件 desc查看表结构,查看是否可以插入空值 mysql> desc t5; +-------+---------+-----...baseball','others') # 集合类型 ) # 插入的时候只能插入枚举类型指定的字段 insert into user values(1,'hammer','male'); # 正确的 insert

    1.5K31

    国产数据库兼容过程中涉及的MySQL非严格模式

    在非严格模式下,MySQL会对某些数据插入、更新和比较操作执行隐式转换,从而在一些情况下允许执行一些宽松的操作,而不抛出错误或警告。...涉及的主要参数说明如下: a) STRICT_TRANS_TABLES:在插入或更新数据时,禁止自动转换类型,确保所有数据都符合表定义的数据类型范围。如果值无法转换为合法的数据类型,则抛出错误。...e) ERROR_FOR_DIVISION_BY_ZERO:当除数为零时,抛出错误而不是返回NULL。...-00-00'等 2) 非严格的字符串插入:在非严格模式下,MySQL允许插入过长的字符串,会自动截断超过字段长度的部分 (建议已开启此类严格模式) eg: varchar(2) 类型的字段,插入...可以插入150,且插入后的值自动截断为 127 4) 非严格的零值插入:在非严格模式下,MySQL允许插入字符串类型的值到数值类型字段,会将非数值字符串转换为0 (建议已开启此类严格模式) eg:

    36120

    MySQL sql_mode应该如何指定

    sql_mode是个很容易被忽视的变量,在5.6之前默认为空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境一般将这个值设置为严格模式。...sql_mode分类及各值定义 分类sql_mode说明启用不启用数据检查类NO_ENGINE_SUBSTITUTION指定ENGINE时,需要的存储引擎被禁用或不存在,该如何处理直接报错Warning...|视为字符串的连接操作符而非 或 运算符- - NO_TABLE_OPTIONS 使用SHOW CREATE TABLE时不会输出MySQL特有的语法部分,如 ENGINE。...mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。...用于事物时,会进行事物的回滚。日期类型中的月和日部分不能包含0,不能有0这样的日期(0000-00-00),数据不能除0,禁止grant自动创建新用户等一些校验。

    2.1K30

    MySQL(数据类型和完整约束)

    L+4字节,在此L<2^24 ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值数目(最大值65535) SET 一个设置,字符串对象可以有0个或多个SET成员 1,2,3,4或8...默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。...因此需要插入记录同时插入当前时间时,使用TIMESTAMP是方便的,另外TIMESTAMP在空��上比DATETIME更有效。...View Code 类型一 not null和default not null – 不可空 default默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 =======...==============default==================== #设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值

    98220

    PawSQL更新 | 新增9个SQL正确性审核规则

    PawSQL最新版本针对DML和DQL新增了审核和重写优化规则共计33个,整体的规则数目达到了83个,覆盖了正确性,安全性、可维护性、性能四个方面的SQL质量问题,并提供了优化建议,已经形成比较完善的针对数据操作的...避免COUNT DISTINCT多个可空列 规则描述 当你使用COUNT(DISTINCT) 进行多列的计算时,它的计算结果可能和你预想的不同。...默认预警级别 禁止 触发条件 INSERT...VALUES的列显式的指定 INSERT...VALUES列和值数量一致 5....INSERT语句必须包含主键字段 规则描述 对于没有自增主键的表,即使其有默认值,插入数据时应该指定主键的值。 默认预警级别 警告 触发条件 表有主键 主键非自增列 8....INSERT语句禁止使用SYSDATE函数 规则描述 当SYSDATE()函数在基于STATEMENT模式的主从环境下可能造成数据的不一致,因为语句在主库中执行到日志传递到备库,存在时间差,到备库执行的时候就会变成不同的时间值

    8210

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券