首页 新闻 搜索 专区 学院

mysql数据库性别enum类型,男、女,但insert 1、2成功???

0
[已解决问题] 解决于 2014-10-10 14:27

怎样设置改变默认值1、2,只允许成功插入男、女??

ALTER TABLE `studentinfo`
    CHANGE COLUMN `sex` `sex` ENUM('','') NOT NULL DEFAULT '' COMMENT '性别' 

插入操作1、2后查询成功

insert into studentinfo(stuid,classid,sex) values("1214","2014001",1)
slyvia_w的主页 slyvia_w | 初学一级 | 园豆:139
提问于:2014-10-10 09:06
< >
分享
最佳答案
0

通常的做法是数据库不设限制,而是在UI层或是数据层进行限制。

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:30753 | 2014-10-10 09:52

如果是这样,那我性别也没必要设置成enum类型,反正代码中都得判断???

slyvia_w | 园豆:139 (初学一级) | 2014-10-10 10:00

@slyvia230: 这么说也是对的。在数据库中设置,只是为了数据库设计人员或者维护人员的方便。

或者这么说吧,通常每一个编程的层面都是可以对数据或是逻辑进行控制,

程序员只是用自己的经验来判断,将逻辑设置在哪一层更为合适。

如果该层不提供相应的限制措施,则换另一层最合适的。

爱编程的大叔 | 园豆:30753 (高人七级) | 2014-10-10 10:10
其他回答(2)
0

enum默认就是整数,不过貌似从0开始计数。

使用enum代替整数,只是为了可读性,没有其它的特别意义。

enum类型的变量只要是兼容类型(如整数)范畴内,可以赋值任何值,而不是只局限于enum定义的枚举值列表。

519740105 | 园豆:5810 (大侠五级) | 2014-10-10 09:39

我试了下,整数1、2,字符“0”,“1”,“2”都行,1、2,“1”、“2”都是对应“男”,“女”,字符“0”插入后是空的。

那性别类型的约束是不是只能在代码中设置??

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 09:59

@slyvia230: 那可能就是enum的定义是正整数的原因了。比如,你用3、4、5之类的数据插入呢?

至于性别类的约束,这个可以通过数据库来约束,比如你定义成bool,比如你通过一个触发器来限制,比如某些数据库支持这样的限制。但是,一般来说,不要在数据库层做这个限制,而把这个限制转移到应用层。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-10 10:16

@519740105: 性别现在分为:

男、女、双性、变性、不清楚、...

请问如何用Bool表示?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2014-10-10 11:12

@爱编程的大叔: 还有无性、男变女性、女变男性

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-10 11:22

@519740105: 而且使用True表示男性,用False表示女性,这是对女性的不尊重,涉嫌性别歧视...

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2014-10-10 11:29

@519740105: 1、2是enum类型系统自定义数值,除1、2外整数都不行

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 13:40

@爱编程的大叔: 额。。。之前是用的bool类型。mysql中bool类型1和0,我设置1、0对应男女,只是这样的话在数据库操作时需要检查、转换

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 13:42

@爱编程的大叔: 大叔,思维不要这么活跃,眼界不要这么开阔啊

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 13:44

@slyvia230: 那就是MYSQL识别了enum,都不需要去额外限制就能达成通过数据库来限制数据内容的需求了。

至于1、2,是因为enum默认是整数,默认1开始,你只有两个性别也就只有1、2有效了(顺序号)。

从业务需求来说,这个设计对今后会有很大的负面影响,最好还是在应用系统中去控制,而不是在数据库系统中控制。

而且,既然你是这样的定义,从性能的角度来考虑,还不如用bool来标识。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-10 13:45

@爱编程的大叔: 哦,不对,之前用的bit类型1、0

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 13:45

@519740105:嗯,谢谢您的回答。 bool标识数据操作时要判断、变值有点点麻烦,我还是用的enum,不过代码中添加了已经输入操作判断,较之bit类型,删了一部分代码。

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 14:24

谢谢你对enum类型的理解阐述

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 14:29
0

用bit类型

悟行 | 园豆:12422 (专家六级) | 2014-10-10 13:21

一开始就是用的bit,1、0表示男女,数据操作时需要判断、变值的地方太麻烦了。显示时1、0变男、女;添加、修改时输入的男、女还得变成数据库类型。不过现在都换了,还是用的enum,代码中只需要添加一个判断就行。

支持(0) 反对(0) slyvia_w | 园豆:139 (初学一级) | 2014-10-10 13:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册