【问题标题】:What is the best way to return enum values in MySQL?在 MySQL 中返回枚举值的最佳方法是什么?
【发布时间】:2011-01-10 06:25:02
【问题描述】:

我需要选择一列的枚举值。通过搜索我发现了两种方法:

SELECT column_type FROM information_schema.columns 
WHERE table_name = 'MyTable' AND column_name = 'MyColumn';

和其他:

SHOW COLUMNS FROM `mytable` WHERE field = 'type';

虽然第一个查询会给我这个信息:

enum('value1','value2','value3')

第二个查询给了我同样的结果,而且还有额外的列。我宁愿在没有enum() 和逗号的情况下获取这些值,是否有可能,或者我是否需要解析这些值?并不是说检查是否有更简单的方法很难。

假设没有更简单的方法,上面的两个查询哪个更好用?我注意到第二个查询在我运行它时没有显示查询时间,我几乎认为它根本不需要任何时间。但是如果我打开分析器,我可以看到它确实需要时间,但它似乎有点快。那么第二个查询会更高效吗?

【问题讨论】:

    标签: mysql enums


    【解决方案1】:

    我猜你不能选择这些值,我最终用这个解析了这些值:

    $result = str_replace(array("enum('", "')", "''"), array('', '', "'"), $result);
    $arr = explode("','", $result);
    return $arr;
    

    【讨论】:

    • 请注意,每个枚举在 MySQL 中都有一个隐式的 '' 成员。不要忘记将其添加到您的数组中。 (如有必要,也可以NULL。)
    【解决方案2】:

    如果可行,请尝试以下操作

    SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING(COLUMN_TYPE, 7,     
    LENGTH(COLUMN_TYPE) - 8), "','", 1 + units.i + tens.i * 10) , "','", -1)
    FROM INFORMATION_SCHEMA.COLUMNS
    CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION 
    SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9) units
    CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION 
    SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9) tens
    WHERE TABLE_NAME = 'mytable' 
    AND COLUMN_NAME = 'mycolumn'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2013-05-09
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多