mysql选择数字溢出

mysql选择数字溢出,mysql,sql,random,Mysql,Sql,Random,我有以下疑问: SELECT (RAND() * (SELECT MAX(id) FROM frag.test)) SELECT RAND()*id from frag.test; 结果为:-2.368350279671E+18 id是一个:idbigint(20)无符号 问题是 SELECT MAX(id) FROM frag.test 结果显示:15783548181713655808 如果我用文字数字代替select,它就可以工作了 SELECT (RAND() * 15783548

我有以下疑问:

SELECT (RAND() * (SELECT MAX(id) FROM frag.test))
SELECT RAND()*id from frag.test;
结果为:-2.368350279671E+18
id是一个:
id
bigint(20)无符号

问题是

SELECT MAX(id) FROM frag.test
结果显示:15783548181713655808

如果我用文字数字代替select,它就可以工作了

SELECT (RAND() * 15783548581713655808
结果为1.50243050315076e+19

此外,还需要执行以下查询:

SELECT (RAND() * (SELECT MAX(id) FROM frag.test))
SELECT RAND()*id from frag.test;
结果:

+----------------------+
| RAND()*id            |
+----------------------+
| 2.90739099802377e+18 |
| 3.18790581714312e+18 |
| 4.55299756382674e+18 |
| 8.53310890373737e+18 |
| 5.32382972831492e+18 |
| 1.13192831652015e+19 |
+----------------------+
只有在使用MAX()时,问题才会出现

有人对这里可能发生的事情有什么想法吗

谢谢大家!

编辑:

正如coge所指出的,这与铸造有关。 我将查询改为

SELECT (RAND() * (SELECT cast(MAX(id) as decimal(30,10)) FROM frag.test));

现在,它的工作如预期

我认为数据类型可能有问题。Rand()返回一个浮点值。我不是MySQL专家,但我想知道浮点是否会继承转换为int


尝试将Rand()的结果转换为int或将bigint转换为float或decimal。

你说得对!我在铸造方面做了一些探索,找到了解决方案!