喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: [原创] mysql没有必要枚举整型  
 
tystok (tystok)
新手上路
Rank: 1
初级会员



UID 67532
精华 0
积分 4
帖子 2
金钱 4 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-27
状态 离线
mysql没有必要枚举整型

mysql没有必要枚举整型

有些人习惯地把一些状态表示为整型,在mysql存储这些整型时,却转化成字符串,存在了枚举型的列中。这是不必要的。因为在mysql存储这

些枚举字符串时是把这样字符串做一个序列(index),然后存储相应的index值,比如

Enum_value     index
NULL                NULL    如果NULL是被允许的话
''                       0    一切在在插入时,被视为非法值的字符串,插入的都为空
'a'                     1
'b'                     2
...                    ...

也就是说,我们在插入值时,是插入的'a','b'等等字符串,但Mysql真正存储是则是右边的index.如果真得左边的ENUM也为整型值,则是不可取的。因为:
If you store a number into an ENUM column, the number is treated as an index, and the value stored is the enumeration member

with that index. (However, this does not work with LOAD DATA, which treats all input as strings.) It's not advisable to

define an ENUM column with enumeration values that look like numbers, because this can easily become confusing. For example,

the following column has enumeration members with string values of '0', '1', and '2', but numeric index values of
1, 2, and 3.

ENUM的最多的个数也证明了这一点。
An enumeration can have a maximum of 65,535 elements.

同时,都知道程序的需求变化很快,尤其是WEB类的脚本程序。ENUM在表示状态时,也会面临着扩展状态所带来困扰。你必须改变表结构新的值被允许存入。

建议:表示状态类的最好用TINYINT。枚举不是不行,但至少它是最好。
2006-12-21 10:50 AM#1
查看资料  Blog  发短消息  顶部
 
smoon
中级会员
Rank: 3Rank: 3
中级会员



UID 31061
精华 0
积分 331
帖子 325
金钱 331 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-9-11
状态 离线
[推荐阅读] 服务器上upload_tmp_dir 文件里产生非常多0字节文件的疑问
如果你想表示的是星期,你用1,2,3,4,5,6,7或是枚举Mon......这样的很容易明白
不过,有些情况,把个比方:
现在需要几个色:红,黄,白......
你可以用0,1,2,3,4,5,6......
或者是red,yellow,.....
这样的情况,如果你用数字,我想如果不多记几遍,你也会搞迷糊的吧!




激情小电影:H小说大本营
http://www.goldthe.com
2006-12-22 09:08 AM#2
查看资料  访问主页  Blog  发短消息  QQ  ICQ 状态  顶部
 
tystok (tystok)
新手上路
Rank: 1
初级会员



UID 67532
精华 0
积分 4
帖子 2
金钱 4 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-27
状态 离线
[推荐阅读] 北京民众集团招聘php程序员和系统工程师
smoon所说的就是枚举的优点 所在,它可以存储相应的index值却显示的是字符串,但缺点就显示出来,如果我要增添一个颜色值,那么我们就不得不去改变表结构,以适应新的需求。对于上百万的记录来说,改变结构会是一个恐怖的事情。数字的代表涵义是比较难记,但可以用常量写在config中并加以解释。
2006-12-22 09:28 AM#3
查看资料  Blog  发短消息  顶部
 
刀鱼
版主
Rank: 7Rank: 7Rank: 7
好好做人,认真做事


UID 67208
精华 0
积分 677
帖子 823
金钱 677 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-12-15
来自 北京
状态 离线
[推荐阅读] 哪位高手给个简单的php 多态的例子!
恩,tystok 说的很有道理表示状态类因该是TINYINT>enum>char



有项目需求,请联系:daoyu_06@126.com.
2006-12-22 05:38 PM#4
查看资料  Blog  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 关于mysql sleep进程!
用inyint是比较好用,虽然不易理解,便对设计者来说,性能是较高的。换了另一个人来说,就不易理解了。但还是赞成 tystok与 刀鱼 的说法的。比如1与0两种,可以不需先知道字段值来切换状态。因为1-1=0,,1-0=1(1-字段=与字段相反的值)



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-12-23 10:51 PM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] php中如何鏈接多個數據庫呢?
写程序的支持要向sqlite看齐,sqlite可没有enum.




2006-12-24 01:33 PM#6
查看资料  访问主页  Blog  发短消息  顶部
 
namelessxp
高级会员
Rank: 4
*禁止发言*



UID 65789
精华 0
积分 969
帖子 1229
金钱 969 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2005-8-12
状态 离线
[推荐阅读] c里边的“&”类型到php里怎么处理!


QUOTE:
原帖由 qh663 于 2006-12-23 10:51 PM 发表
用inyint是比较好用,虽然不易理解,便对设计者来说,性能是较高的。换了另一个人来说,就不易理解了。但还是赞成 tystok与 刀鱼 的说法的。比如1与0两种,可以不需先知道字段值来切换状态。因为1-1=0,,1-0=1(1- ...
可以查表




++++++++++[>++++++++>++++++++++>+++++++++++>++++++++++>+++++
++++++>++++++++++>+++++++++++<<<<<<<-]>--.>---.>-.>+.>--.>+.
>+++++..[-]<[-]<[-]<[-]<[-]<[-]<[-]<
2006-12-24 01:46 PM#7
查看资料  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.022739 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP