2011-07-12 137 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太工作..