Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 返回的多条记录不';与字段值不匹配_Mysql_Duplicates - Fatal编程技术网

Mysql 返回的多条记录不';与字段值不匹配

Mysql 返回的多条记录不';与字段值不匹配,mysql,duplicates,Mysql,Duplicates,我的表中有一个字段ref varchar(255) 我有一系列的内部和内部表,用于各种查询。这些考试一直神秘地失败,今天我参加了一次考试 Select ref from Table1 where ref=6455186837893226538 group by ref 它回来了 参考号 6455186837893226533 6455186837893226534 6455186837893226535 6455186837893226536 6455186837893226537 6455

我的表中有一个字段
ref varchar(255)

我有一系列的内部和内部表,用于各种查询。这些考试一直神秘地失败,今天我参加了一次考试

Select ref from Table1 where ref=6455186837893226538 group by ref
它回来了

参考号

  • 6455186837893226533
  • 6455186837893226534
  • 6455186837893226535
  • 6455186837893226536
  • 6455186837893226537
  • 6455186837893226538

显然,只有1是正确的。我甚至不确定在这里调试什么。看起来像是桌子损坏吗?我注意到它似乎只选择了前17位,但不确定其相关性。

您的代码将字符串与数字进行比较,当数字太大时,可能会产生意外值(在这种情况下,MySQL会进行浮点数字比较)。它也相当低效,因为它会导致将字符串转换为数字,这会破坏现有索引

相反,您需要执行字符串比较,方法是将数字用单引号括起来:

select ref from Table1 where ref = '6455186837893226538' group by ref
请注意,您的查询目的相当不明确;您正在对同一列进行筛选、分组和选择,这没有多大意义。

,您正在将整数与字符串进行比较。应该是这样

select ref
from Table1
where ref='6455186837893226538'
group by ref
但是为什么你会得到你想要的结果呢?一些实验

insert into refs values
('64551868378932265'),
('645518683789322653'),
('6455186837893226539'),
('64551868378932265391'),
('6455186837893226531'),
('6455186837893226512'),
('6455186837893226123'),
('6455186837893221234');

select ref
from refs
where ref=6455186837893226539;

6455186837893226539
6455186837893226531
6455186837893226512
6455186837893226123
截止日期为6455186837893226。MySQL必须强制转换
ref
或6455186837893226。可能有什么东西正在被截短,MySQL喜欢默默地截短

select cast(6455186837893226539 as char);
6455186837893226539
否。将字符串强制转换为整数如何?6455186837893226539非常接近64位整数的极限

select cast('6455186837893226539' as signed);
6455186837893226539

select cast('6455186837893226539' as unsigned);
6455186837893226539
没有

这是MySQL。你能用什么最愚蠢的方式投这个球?A

有6455186837893226


MySQL决定,将varchar与整数进行比较时,最好将两边都转换为双精度:facepalm:

如果你用单引号括起数字,比如
where ref='6455186837893226538'
,它是否有效?@GMB是的,事实上它确实有效。你使用的是哪个版本的MySQL?就组而言,我只是试图返回代表性的值,因为(目前)这些值不是唯一的。实际上,我只是查看主表,看看问题是什么/是否存在。如果我在表之间进行选择,例如T1.ref=T2.ref,会发生什么情况?这是否执行了字符串比较?@user3649739将根据列的类型(即varchar)对它们进行比较。
select cast('6455186837893226533' as float);
6.45519e18

select cast('6455186837893226539' as double);
6.455186837893226e18