假设我有一个名为“status”的数据类型作为mysql表中的一行。状态只能是固定数量的字符串,例如“活动”,“非活动”和“待定”。最佳实践使用什么数据类型?
答案 0 :(得分:3)
具体来说,就是ENUM类型:http://dev.mysql.com/doc/refman/5.5/en/enum.html
CREATE TABLE ... (
status ENUM('active', 'inactive', 'pending')
...
);
答案 1 :(得分:1)
如果在开发时固定了一组状态,您肯定想使用ENUM。另一种情况是可以在运行时添加可能的状态。在这种情况下,您希望使用分隔表来存储它们和外键以检查所有状态是否有效。
使用简单的字符串是一种不好的做法。例如。只是一个小的拼写错误状态可以打破与特定行相关的所有内容。
答案 2 :(得分:1)
只有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
答案 3 :(得分:-1)
您可以遵循您提议的三个选项中的任何一个,也可以使用ENUM。
我会避免使用第1号选项。
我会选择nr去(但这是编码风格和偏好的问题)。 3.将值存储为字符串,使用固定大小的字段,如大小为16的字符...