本文介绍: 当为浮点或定点列分配的值超出指定(或默认)精度和小数位数隐含的范围时,MySQL 会存储表示该范围的相应端点的值。如果启用严格 SQL 模式,MySQL 将根据 SQL 标准拒绝超出范围的值并显示错误,并且插入失败。整数列,则结果将被截断为该列类型的最大值,或者如果NO_UNSIGNED_SUBTRACTION。如果未启用限制模式,MySQL 会将值剪辑到列数据类型范围的适当端点,并存储结果值。当将超出范围的值分配给整数列时,MySQL 存储表示列数据类型范围的相应端点的值。启用,则被截断为 0。
MySQL数字类型超出范围时的溢出处理
当 MySQL 在数值列中存储超出列数据类型允许范围的值时,结果取决于当时有效的 SQL 模式:
假设一个表t1
有这样的定义:
启用严格 SQL 模式后,会出现超出范围错误:
如果未启用严格 SQL 模式,则会发生带有警告的剪辑:
当未启用严格 SQL 模式时,由于剪裁而发生的列分配转换将被报告为ALTER TABLE
、 LOAD DATA
、 UPDATE
和多行 INSERT
语句的警告。在严格模式下,这些语句会失败,并且部分或全部值不会插入或更改,具体取决于表是否是事务表和其他因素。有关详细信息,请参见 第 5.1.11 节“服务器 SQL 模式”。
数值表达式求值期间溢出会导致错误。例如,最大的有符号 BIGINT
值是 9223372036854775807,因此以下表达式会产生错误:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。