数据库版本 MySQL 5.1测试表结构
DROP TABLE IF EXISTS `t1`;
CREATE TABLE IF NOT EXISTS `t1(
  `id` INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` ENUM('a','b','c') NOT NULL
);如何知道name字段的最大值呢??
或者
INSERT INTO `t1` VALUES(1,5);
这样插入的时候会提示错误,可以让它不提示错误,而是直接返回插入了0条记录吗??主要是想获取ENUM的所有值,用
SHOW FULL COLUMNS FROM `t1` LIKE 'name';
然后后台,如PHP可以使用
$arr = explode("','", strsub($db_result->Type, 5, -1);
这样是可以,但...如果ENUM里的可能值是...
`name` ENUM('a','\',\'b\',\'','c')
这种比较变态的可能值的话,上面这条PHP命令就失效了(当然还可以用正则表达式的方法来分割字符串)
但我想...如果知道ENUM的最大值的话,是不是可以
先创建一个临时表
CREATE TEMPORARY TABLE IF NOT EXISTS `t_tmp` SELECT `name` FROM `t1` WHERE 1<>1;
ALTER TABLE `t_tmp` ADD COLUMN `id` INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY;
然后
INSERT INTO `t_tmp`(`name`) VALUES(1),(2)...;
最后
SELECT * FROM `t_tmp` WHERE 1=1 ORDER BY `id`;然后后台就可以直接保存这个数组了...
当然...这样的效率绝对比不上正则表达式来得快,但...因为我不知道ENUM里会转移的字符到底有多少,所以只好用这种笨方法了(但绝对准确)但关键是如果用上面INSERT INTO TAB VALUES(1),(2)...;的方法,则当有某个值不是ENUM里可能值的话,就会因为错误而导致前面的插入都失效...而如果每次INSERT INTO 一条数据的话...又太影响效率了...
有什么办法可以获取到ENUM字段的最大可能值吗??

解决方案 »

  1.   

    ENUM是表定义定死的  业务定死的数据为什么非要计算出来
      

  2.   

    因为我希望可以动态添加ENUM字段的可能值...
      

  3.   

    后来用后台PHP配合MySQL实现这功能了...
    先按照主楼的第一种方法,通过截取字符串',',把ENUM字段的定义获取到数组中,然后获取数组长度
    如果ENUM字段的定义中没有出现主楼说的那种变态的可能值定义的话,那获取到的长度就是准确的
    如果有那种可能值的话,那长度会偏大
    然后根据这个长度循环,从最大值开始一个一个插入数据库,如果插入成功,就退出循环,然后用批量插入把其他的可能值插入数据库
    如果插入失败,那就把长度-1,再次插入,直到插入成功