2011-01-12 92 views
2

我的數據庫中的大多數表都具有類型爲varchar的數據,並將長度設置爲36,用於填充本機創建的GUID。 varchar是最合適的數據類型來存儲guid值或mysql中的任何其他類型? PLZ解釋mysql數據類型

+3

請問你的GUID是什麼樣子? – Tobias 2011-01-12 14:55:35

回答

1

這是一個很好的問題。我在很多地方看到,他們使用varchar來表示不同類型的ID,看起來像數字。那麼爲什麼不使用整數?嗯,根據我的經驗,主要有三種情況:

  1. 雖然他們是數量,他們可能會過大。例如,對於32位數的數字(64位無符號整數的最大值爲20位),您將無法使用整數(即使是64位大整數)。

  2. 某些數字有特殊的格式。例如,電話號碼可能如下所示:+44(12)3456789。現在顯然,+,(和)不是數字的一部分,您可以在沒有它們的情況下調用該數字,但這是通常的格式,所以對於整數變量,您將無法存儲該數字。

  3. 在未來你可能會改變你的ID,包括字母,所以這是一個很好的做法,允許從一開始的信件,以避免以後改變數百萬條記錄。

希望有所幫助。

2

您可能想查看PROCEDURE ANALYSE。它可以幫助根據表中已經存在的內容建議適當的數據類型。

這裏是一個blog post也談到PROCEDURE分析和可能會有所幫助。

0

我的意思是,VARCHAR允許要使用的每個字符,並且通常由像數數據類型溢出防止。所以......好吧,如果你希望你的GUID在數字字符之外包含大的值或值,那麼你就是金。

1

如果您的GUID總是長度爲36且不爲空,請使用CHAR而不是VARCHAR。它將節省空間,因爲VARCHAR必須爲每一行存儲一個長度前綴。

另外,如果您的所有列的長度固定,它會因爲數據庫能更高效地掃描行增加在某些情況下的性能。

MySQL Reference Manual - The CHAR and VARCHAR Types

1

這一切都取決於你的意思是「最合適」的。

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(),'-',''))