GreatSQL社区

搜索

[已解决] 隐式转换导致结果输出异常

721 1 2023-12-13 17:26
本帖最后由 ShawnYan 于 2023-12-13 17:54 编辑
  1. (Wed Dec 13 17:24:51 2023)[root@GreatSQL][s1]>select version();
  2. +-----------+
  3. | version() |
  4. +-----------+
  5. | 8.0.32-24 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
复制代码

test case:

  1. create table t1 (
  2. id int not null,
  3. name varchar(255) default null,
  4. primary key(id)
  5. );

  6. insert into t1 values (1,'123456789012345611');
  7. insert into t1 values (2,'123456789012345612');
  8. insert into t1 values (3,'123123');

  9. create table t2 (
  10. id int not null,
  11. name bigint default null,
  12. primary key(id)
  13. );

  14. insert into t2 values (1,'123456789012345611');
  15. insert into t2 values (2,'123456789012345611');
  16. insert into t2 values (3,'123123');
复制代码

results:

  1. (Wed Dec 13 17:24:04 2023)[root@GreatSQL][s1]>select t1.id id1, t1.name name1, t2.id id2, t2.name name2
  2.     -> from t1,t2
  3.     -> where t1.name = t2.name;
  4. +-----+--------------------+-----+--------------------+
  5. | id1 | name1              | id2 | name2              |
  6. +-----+--------------------+-----+--------------------+
  7. |   2 | 123456789012345612 |   1 | 123456789012345611 |
  8. |   1 | 123456789012345611 |   1 | 123456789012345611 |
  9. |   2 | 123456789012345612 |   2 | 123456789012345611 |
  10. |   1 | 123456789012345611 |   2 | 123456789012345611 |
  11. |   3 | 123123             |   3 |             123123 |
  12. +-----+--------------------+-----+--------------------+
  13. 5 rows in set (0.01 sec)

  14. (Wed Dec 13 17:53:57 2023)[root@GreatSQL][s1]>select t1.id id1, t1.name name1, t2.id id2, t2.name name2 from t1,t2 where cast(t1.name as decimal(20)) = t2.name;
  15. +-----+--------------------+-----+--------------------+
  16. | id1 | name1              | id2 | name2              |
  17. +-----+--------------------+-----+--------------------+
  18. |   1 | 123456789012345611 |   1 | 123456789012345611 |
  19. |   1 | 123456789012345611 |   2 | 123456789012345611 |
  20. |   3 | 123123             |   3 |             123123 |
  21. +-----+--------------------+-----+--------------------+
  22. 3 rows in set (0.00 sec)

  23. (Wed Dec 13 17:24:42 2023)[root@GreatSQL][s1]>select t1.id id1, t1.name name1, t2.id id2, t2.name name2
  24.     -> from t1,t2
  25.     -> where t1.name = cast(t2.name as binary);
  26. +-----+--------------------+-----+--------------------+
  27. | id1 | name1              | id2 | name2              |
  28. +-----+--------------------+-----+--------------------+
  29. |   1 | 123456789012345611 |   1 | 123456789012345611 |
  30. |   1 | 123456789012345611 |   2 | 123456789012345611 |
  31. |   3 | 123123             |   3 |             123123 |
  32. +-----+--------------------+-----+--------------------+
  33. 3 rows in set (0.00 sec)
复制代码




全部回复(1)
yejr 2023-12-13 17:32:30
类型隐式转换在MySQL源头就存在,以上结果也是合规的,详见MySQL关于类型隐式转换规则 https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html
ShawnYan

21

主题

1

博客

815

贡献

版主

Rank: 7Rank: 7Rank: 7

金币
14441
贡献
815

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-1-19 02:22 , Processed in 0.025196 second(s), 16 queries , Redis On.
快速回复 返回顶部 返回列表