为什么MySQL中声明DECIMAL(0,0)会转为DECIMAL(10,0)且无报错?
现象原因
- MySQL中
DECIMAL(M,D)类型的两个参数存在固定的合法取值范围:- M是数字总位数,合法区间为1~65,缺省默认值为10
- D是小数部分位数,合法区间为0~30,且必须小于等于M,缺省默认值为0
- 你提交的
DECIMAL(0,0)里M参数值为0,不符合合法范围要求,MySQL会自动将非法的M替换为默认值10,D参数0符合规则保留,最终生成的字段类型就是DECIMAL(10,0)。
无错误提示的原因
该行为由SQL模式配置决定:
- MySQL默认未开启严格SQL模式(
STRICT_TRANS_TABLES、STRICT_ALL_TABLES),针对字段类型参数不合法这类可兼容处理的异常,会自动修正为合法值后继续执行,不会抛出错误。 - 若开启严格SQL模式后再执行该建表语句,会直接返回类型参数不合法的错误,终止建表操作。
内容的提问来源于stack exchange,提问作者Payel Senapati
相关产品推荐
相关产品推荐

