You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL/MariaDB中SELECT 0 = 'N;'返回true的原因咨询

为什么0会与PHP序列化的null值'N;'匹配?

这是MySQL/MariaDB的隐式类型转换导致的结果,核心规则是:当数字与字符串进行相等比较时,数据库会自动将字符串尝试转换为数字类型后再做比较。

具体转换逻辑:

  • 从字符串的起始位置读取连续的数字字符(包括正负号、小数点),直到遇到非数字字符为止;
  • 如果字符串开头就不是有效数字,转换后的结果为0。

对应你的测试场景:

  • SELECT 0 = 'N;':字符串'N;'的第一个字符是非数字,转换为数字0,0和0相等,所以返回1;
  • SELECT 1 = 'N;':'N;'转换为0,1和0不相等,返回0;
  • 至于0 = null返回null、'N;' is null返回0,是因为null的比较规则特殊:任何值和null用=比较都返回null,is null是严格判断值是否为null,'N;'显然不是null,所以返回0,这部分和隐式类型转换无关。

如果要避免这种错误匹配,需要强制类型一致后再比较,比如:

  • 将数字字段转为字符串:SELECT CAST(0 AS CHAR) = 'N;',返回0;
  • 用BINARY关键字强制按二进制字符串比较:SELECT 0 = BINARY 'N;',返回0。

内容的提问来源于stack exchange,提问作者frumbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:24:27