說我有一個稱爲「狀態」的數據類型作爲一個MySQL表中的一行。狀態只能是固定數量的字符串,例如「活動」,「不活動」和「待處理」。哪種數據類型最適合使用?MySQL中固定數量字符串的最佳實踐?
- 製作另一個表「狀態」,並在我的表中有一個指針ID?
- 製作一個包含不同狀態的php數組,並使用我的狀態行作爲數組的索引?
- 簡單地讓狀態是一個包含當前狀態的字符串?
說我有一個稱爲「狀態」的數據類型作爲一個MySQL表中的一行。狀態只能是固定數量的字符串,例如「活動」,「不活動」和「待處理」。哪種數據類型最適合使用?MySQL中固定數量字符串的最佳實踐?
如果這組狀態在開發時是固定的,那麼一定要使用ENUM。另一種情況是可能的狀態可以在運行時添加。在這種情況下,您希望使用分隔表來存儲它們和外鍵,以檢查所有狀態是否有效。
對此使用簡單的字符串是一種不好的做法。例如。只是一個小小的拼寫錯誤可能會破壞與特定行相關的所有內容。
具體正是出於這個目的是ENUM類型:http://dev.mysql.com/doc/refman/5.5/en/enum.html
CREATE TABLE ... (
status ENUM('active', 'inactive', 'pending')
...
);
http://komlenic.com/244/8-reasons-why -mysqls-enum-data-type-is-evil/ – fancyPants
您可以按照任何你提出的三個選項,再加上你可以使用ENUM。
我會避免選擇號碼1
我會去(但它的編碼風格和喜好的問題)與選項NR。 3.將值存儲爲一個字符串,其中包含固定大小的字段,如char大小爲16的字符...
對於僅3個非可變長值,索引是不夠的。
對於有限的,固定數量的字符串使用SET
類型是這樣的:
ALTER TABLE `table` ADD `status` SET('active', 'insactive', 'pending') NOT NULL
和校驗字段的值,你可以通過它們的名字
('active', 'insactive', 'pending')
或偶數(1 , 2 , 3)
訪問它們。
例如,如果提交的值是活躍:
if($value=="active") //returns TRUE
if($value== 1) //returns TRUE too
這聽起來像你想使用'ENUM'?輸入/輸出是字符串,但它只能是一組特定的值(並且以比VARCHAR更好的方式保存) – h2ooooooo