MySQL使用数字状态代码与文本

时间:2011-08-17 08:42:16

标签: php mysql database types

通常在我的项目(PHP / MySQL)中,我必须在某些数据库表中添加“status”字段。例如,标记任务是否已提交,批准,拒绝。

出于习惯,到目前为止我一直在使用数字状态代码(0代表提交,1代表批准,-1代表拒绝)。出于某些原因,我认为服务器处理起来效率更高。

现在我想知道,我的假设有缺陷吗?有关系吗?为了便于阅读,将它们存储为VARCHAR会更容易,例如'SUBMITTED','APPROVED','REJECTED'。然后在PHP代码中而不是检查数值,检查字符串。

我很确定理论上检查INT比String更快。但是,对于网络应用程序来说,这是不同的吗?

请告知。

由于

2 个答案:

答案 0 :(得分:3)

也许这只是一个偏好问题,但我讨厌没有明显意义的幻数。在这种情况下,通常有两种情况:

  • 值不太可能改变(例如,性别:男/女)
  • 值可能会发生变化(例如,类别:本地/国家/体育......)

在第一种情况下,我更喜欢使用ENUM作为列类型。它在内部作为整数处理,但你将其称为字符串。

在第二种情况下,我创建一个主表并将子列定义为外键。这给了值的一些含义,即使它是一个自动递增的整数。并且它无论如何都不需要是整数。

答案 1 :(得分:1)

使用ENUM可以获得这两种方法的好处。

如果你想使用纯数字代码,不要将它们与PHP中的数字进行比较,定义常量:

define( 'SUBMITTED', 1 );
define( 'APPROVED', 2 );
define( 'REJECTED', 3 );

if( $code == APPROVED ) {
    //do something
}