2011-07-12 143 views
2

我正在使用mysql数据库来保存id。它工作正常。在MySQL数据库中存储大量数据的问题

但现在这样的id为10000000754987.存储为1.0000000754987E + 14。我该如何修复它。

该字段设置为varchar 255个字符限制。

我很感激任何帮助。

谢谢。

+0

请后插入代码,你确定它的一个varchar领域?你在上面看到的是[科学记数法](http://en.wikipedia.org/wiki/Scientific_notation),它不需要修复,它是正确的;) – Jacob

+0

你调试了你的PHP并确保你事实上通过了'10000000754987'而不是'1.0000000754987E + 14'到sql查询? – jlb

+7

你为什么用varchar来存储这些数字?为什么不使用bigint?范围是-9223372036854775808到9223372036854775807.无符号范围是0到18446744073709551615 - 应该对你很有用。那么这只是一个格式化数字的问题。 –

回答

1

你显然使用PHP来生成该ID。

既然你没有提到到底发生了什么,我只能假设你的数据库设计有某些原因。

首先,您可以将该号码存储为bigint而不是varchar。这是一个你正在保存的整数,我没有看到你为什么要使用varchar,并且固有地浪费了比所需空间更多的空间。 bigint使用8个字节来存储一个数字。这意味着每个存储在varchar字段中的数字超过8位的数字将使用比可存储数字高达2^64的bigint字段更多的空间。

其次,确保在将计算操作的结果发送到数据库之前,不要使用任何数字格式。我复制/粘贴您发布的整数(10000000754987),并且php不会自动将其转换为科学记数法,所以我的猜测是您在该数字生成的背景中还有其他内容正在进行 - 如果可能,请将其关闭,并将其存储数字在适当的字段类型(bigint)中。如果您发布有关您的应用的更多信息以及它的作用,它也会很有用,因为错误并不总是出现在人们的事情上。

+1

我认为这是一个有问题的错字,实际上这个数字更长一个数字。我们可以看到这是因为“E + 14”。如果第一个数字是正确的,那么科学表示就是'E + 13'。所以这两个数字是不一样的。 – Karolis

0

你的问题是数字ID已经变得太大,PHP/MySQL无法处理。

将数据类型更改为VARCHAR(36)并且CakePHP现在将开始使用UUIDs而不是数字ID,您也必须在该表的任何外键上执行此操作。这将防止这个问题在未来发生。

此外,因为它是VARCHAR,它应该与您当前的ID太工作..