+-
mysql:为什么将’string’与0比较为真?
我正在做一些 MySQL测试查询,并意识到将字符串列与0(作为数字)进行比较得到TRUE!

select 'string' = 0 as res; -- res = 1 (true), UNexpected! why!??!?!

但是,将它与任何其他数字(正数或负数,整数或小数)进行比较,会按预期给出错误
(当然除非字符串是数字表示为字符串)

select 'string' = -12 as res; -- res = 0 (false), expected
select 'string' = 3131.7 as res; -- res = 0 (false), expected
select '-12' = -12 as res; -- res = 1 (true), expected

当然,将字符串与’0’作为字符串进行比较,假设为false.

select 'string' = '0' as res; -- res = 0 (false), expected

但为什么它’true’为’string’= 0?

这是为什么?

最佳答案
MySQL自动将字符串转换为数字:

SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)

并且一个不以数字开头的字符串被计算为0:

SELECT 'string' = 0 AS res;  -- res = 1 (true)

当然,当我们尝试将字符串与另一个字符串进行比较时,没有转换:

SELECT '0string' = 'string' AS res; -- res = 0 (false)

但是我们可以使用例如运算符来强制转换:

SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

最后一个查询返回TRUE,因为我们将字符串’0string’与数字0相加,所以字符串必须转换为数字,它变为SELECT 0 0 =’string’然后再将字符串’string’转换为a在与0比较之前的数字,然后变为SELECT 0 = 0,这是TRUE.

这也有效:

SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

并将返回转换为数字的字符串的总和(在这种情况下为1 2).

点击查看更多相关文章

转载注明原文:mysql:为什么将’string’与0比较为真? - 乐贴网