今天在对MySQL数据库一张表进行query操作时遇到一个问题,原因竟然是因为表中使用了enum字段,特此记录之。
mysql中使用enum字段设置字段的区间范围,让数据库很好地控制字段的值,但是也有他的弊端,如数据迁移的时候几乎不可能被其他数据库所支持以及接下来笔者想要说明的问题。
1.首先新建一张表,这里用了两个enum字段,flag与flag2
CREATE TABLE `wTest` (
`num` int(11) default NULL,
`stu_name` varchar(20) default NULL,
`flag` enum('0','1','2','3','4') NOT NULL,
`flag2` enum('6','7','8','9') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2.插入数据,select得:

3.select/update/insert操作
select * from wTest where flag=4,结果:

这里flag变成了3? why?原因是这里where条件的flag=4被当成enum枚举字段的索引了,`flag` enum('0','1','2','3','4') ,因为枚举索引是从1开始的,so index=4时flag=3. 若想要查找flag=4的数据,则只需在where条件中将枚举字段值加上单引号,即' '。
select * from wTest where flag='4',结果:

为了避免不必要的麻烦最好不要使用enum字段,今天也是弄了好久,后面desc tablename才发现有个enum字段,之前的select语句都没加上' '
本文通过实例讲解了MySQL中ENUM类型的特殊性及其可能导致的问题,特别是在查询时容易出现的误会。
1006

被折叠的 条评论
为什么被折叠?



