【MYSQL】数据类型强制转换导致数据超预期

-- SQL语句
SELECT
    `t`.`module_id`,
    `ra`.`table_id` -- t.*, ra.*
FROM
    sys_user_auth AS t
JOIN `sys_table` AS `ra` ON `t`.`module_id` = `ra`.`table_id`
AND t.user_role_id = 3
AND t.module_type = 0;

-- 查询结果
--N00 0

-- 字段数据类型
module_id varchar(10)
table_id bigint

-- 测试
select cast('N00' as signed integer)
--0 

-- 强制转换导致结果集异常

-- 修改SQL
SELECT
    `t`.`module_id`,
    `ra`.`table_id` -- t.*, ra.*
FROM
    sys_user_auth AS t
JOIN `sys_table` AS `ra` ON `t`.`module_id` = concat(`ra`.`table_id` )
AND t.user_role_id = 3
AND t.module_type = 0;

参与计算的数据类型应该尽量一致,不一致建议手工转格式,避免异常问题。

你可能感兴趣的:(Mysql)