我的數據庫中的大多數表都具有類型爲varchar的數據,並將長度設置爲36,用於填充本機創建的GUID。 varchar是最合適的數據類型來存儲guid值或mysql中的任何其他類型? PLZ解釋mysql數據類型
回答
這是一個很好的問題。我在很多地方看到,他們使用varchar來表示不同類型的ID,看起來像數字。那麼爲什麼不使用整數?嗯,根據我的經驗,主要有三種情況:
雖然他們是數量,他們可能會過大。例如,對於32位數的數字(64位無符號整數的最大值爲20位),您將無法使用整數(即使是64位大整數)。
某些數字有特殊的格式。例如,電話號碼可能如下所示:+44(12)3456789。現在顯然,+,(和)不是數字的一部分,您可以在沒有它們的情況下調用該數字,但這是通常的格式,所以對於整數變量,您將無法存儲該數字。
在未來你可能會改變你的ID,包括字母,所以這是一個很好的做法,允許從一開始的信件,以避免以後改變數百萬條記錄。
希望有所幫助。
您可能想查看PROCEDURE ANALYSE。它可以幫助根據表中已經存在的內容建議適當的數據類型。
這裏是一個blog post也談到PROCEDURE分析和可能會有所幫助。
我的意思是,VARCHAR允許要使用的每個字符,並且通常由像數數據類型溢出防止。所以......好吧,如果你希望你的GUID在數字字符之外包含大的值或值,那麼你就是金。
如果您的GUID總是長度爲36且不爲空,請使用CHAR而不是VARCHAR。它將節省空間,因爲VARCHAR必須爲每一行存儲一個長度前綴。
另外,如果您的所有列的長度固定,它會因爲數據庫能更高效地掃描行增加在某些情況下的性能。
這一切都取決於你的意思是「最合適」的。
varchar(36)的優點是簡單。您可以按原樣存儲GUID,並輕鬆將其讀回。
但是,如果你擔心的磁盤空間量,列佔用,那麼你有幾個選擇:
VARCHAR(36)= 37個字節 CHAR(36)= 36個字節 CHAR( 32)= 32字節(只是刪除連字符) 二進制(16)= 16字節(刪除連字符和unhex GUID以獲得二進制字符串)
所以,如果你擔心磁盤空間,你會發現二進制(16)比varchar(36)好得多。
這裏是在MySQL得到一個二進制(16)字符串從一個GUID的一個例子:
unhex(replace(uuid(),'-',''))
- 1. MySQL數據類型?
- 2. mySQL數據類型 - int(11)
- 3. MySQL DECIMAL數據類型
- 4. MySQL表數據類型
- 5. Mysql數據類型爲錢
- 6. MySQL的JSON數據類型
- 7. Mysql TimeStamp數據類型
- 8. mysql字段數據類型
- 9. Wakanda MySQL TEXT數據類型
- 10. MySQL數據類型TINYINT(4)
- 11. MySQL CHAR數據類型
- 12. MySQL數據庫的數據類型
- 13. MySql與Java的數據數據類型
- 14. Microsoft Access備忘錄數據類型爲MySQL數據類型
- 15. C#數據類型與MySql數據類型
- 16. MySql排序浮點型數據類型
- 17. 將MySQL Decimal數據類型類型轉換爲c#float數據類型
- 18. MySQL的:操作與TIME數據類型
- 19. 最好的MySQL數據類型
- 20. 爲MySQL選擇數據類型?
- 21. Mysql點數據類型&glength返回null
- 22. 數據類型轉換爲Mysql或python
- 23. SSIS MYSQL到SQL數據類型
- 24. MySQL非常長的數據類型
- 25. MySQL的 - 避免float數據類型
- 26. sails-mysql模式數據類型
- 27. Mysql時間戳數據類型
- 28. MySQL的數據類型爲URL的
- 29. MySQL外鍵數據類型錯誤
- 30. HTML顯示和MySQL數據類型
請問你的GUID是什麼樣子? – Tobias 2011-01-12 14:55:35