如何让MySQL在SELECT列表中对文本执行数学运算时抛出错误而非警告
让MySQL对文本数学运算抛出错误而非警告的配置方法
关键原理
MySQL默认会将无法转换为数字的字符串隐式转为0并仅发出警告,要改变这个行为,需要通过调整sql_mode参数开启严格模式并禁止不安全的隐式转换。
具体配置步骤
1. 临时生效(当前会话)
在MySQL终端执行以下命令,仅对当前连接生效:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_IMPLICIT_CONVERSION';
执行后测试SELECT 'foo' * 'bar';,会直接抛出ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'foo'的错误,不再仅发警告。
2. 永久生效(全局)
要让配置在MySQL重启后依然有效,需要修改配置文件:
- Linux系统:常见路径为
/etc/my.cnf、/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf - Windows系统:通常是
my.ini(位于MySQL安装目录或C:\ProgramData\MySQL\MySQL Server X.X)
打开配置文件,找到[mysqld]段,添加或更新sql_mode:
[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_IMPLICIT_CONVERSION,NO_ENGINE_SUBSTITUTION
(NO_ENGINE_SUBSTITUTION是默认推荐选项,避免创建表时指定引擎不可用的自动替换问题)
保存后重启MySQL服务即可生效。
3. 验证配置
执行以下SQL查看当前生效的sql_mode:
SELECT @@sql_mode;
确认输出中包含STRICT_TRANS_TABLES和NO_IMPLICIT_CONVERSION两个选项即可。
内容的提问来源于stack exchange,提问作者ChrisTaylorDeveloper
相关产品推荐
相关产品推荐

