当前位置: 当前位置:首页 >新闻中心 >MySQL数据库中不同数据类型字段关联后结果居然有这么大差异? 正文

MySQL数据库中不同数据类型字段关联后结果居然有这么大差异?

2025-11-05 14:01:00 来源:多维IT资讯作者:域名 点击:558次

一、据库据类结果居案例

1、同数数据库中先创建表及数据 复制-- 创建tb1 CREATE TABLE tb1 ( id BIGINT NOT NULL PRIMARY KEY,型字 NAME VARCHAR (20) ); INSERT INTO tb1 (id, NAME) VALUES (1459066134882947196, na1), (1459066134882947172, cccb), (1459066134882947163, tttttttn), (1459066134882947198, acqada); -- 创建tb2 CREATE TABLE tb2 ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, pid VARCHAR (20), c1 VARCHAR (10) ); INSERT INTO tb2 (pid, c1) VALUES (1459066134882947196, cs), (1459066134882947197, tt);1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.

tb1 的id表为bigint,tb2表pid字段类型为varchar。

2、段关进行左连接查询 复制SELECT a.id,联后b.pid FROM tb1 a LEFT JOIN tb2 b ON a.id=b.`pid` WHERE a.id =14590661348829471961.2.3.4.

查询结果如下

结果为非预期,因为2个表的差异关联字段的内容并不相同。

3、据库据类结果居使用内连接 复制SELECT a.id,同数b.pid FROM tb1 a JOIN tb2 b ON a.id=b.`pid` WHERE a.id =14590661348829471961.2.3.4.

使用内连接后,结果也不正确。型字

4、段关不加where条件的联后左连接 复制SELECT a.id,b.pid FROM tb1 a LEFT JOIN tb2 b ON a.id=b.`pid`1.2.3.

查询结果如下:

关联后确实是非预期的结果。

5、差异不加where条件的据库据类结果居内连接 复制SELECT a.id,b.pid FROM tb1 a JOIN tb2 b ON a.id=b.`pid`1.2.3.

查询结果为:

此时不加where条件的企商汇内连接的结果却是正确的、

二、同数解决方案

解决此问题的型字方法主要是解决两个关联字段的类型不同的问题,可以有2种方式

1、显式类型转换

在关联的时候显式地进行字段类型转换,例如:

复制SELECT a.id,b.pid FROM tb1 a LEFT JOIN tb2 b ON CAST(a.`id` AS CHAR)=b.`pid` WHERE a.id=14590661348829471961.2.3.

结果如下:

此时结果正确。

内连接结果也正确。 复制SELECT a.id,b.pid FROM tb1 a JOIN tb2 b ON CAST(a.`id` AS CHAR)=b.`pid` WHERE a.id =14590661348829471961.2.3.4. 2、改变字段类型(推荐)

如果两张表的数据量较大,使用显式的亿华云计算字段类型转换(包括当前隐式字段类型转换)都将导致关联时不能使用索引,影响性能。因此建议在表设计时就将存在关联关系的字段类型设置为类型相同(字符类型时字符集及排序规则也一致)例如:

复制ALTER TABLE tb2 MODIFY pid BIGINT;1.

修改后再查询看一下结果:

复制SELECT a.id,b.pid FROM tb1 a LEFT JOIN tb2 b ON a.`id`=b.`pid` WHERE a.id =14590661348829471961.2.3.4.

结果正确:

三、小结

此情况的出现是因为两表的关联字段类型不同时进行字段类型转换导致。bigint与varchar转换过程中字段精度出现问题,实际超过int最大值的数据(2147483647,即2^31 - 1)的数据被截断为2^31 - 1处理,因为两表进行左关联时,存在异常。

从上面的过程中,也发现左连接过程与内连接的过程中的中间数据结果(1.4及1.5中)也不同。服务器租用

作者:IT科技类资讯
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜