MySQL:查询SET的可用选项列表

时间:2012-03-08 14:01:26

标签: mysql

在特定表中,存在具有特定法定值的SET类型字段:

    personType SET('CUSTOMER','SUPPLIER','EMPLOYEE', 'CONTRACTOR') NOT NULL

有没有办法查询MySQL以获取有效值列表?在MySQL解释器中,我只运行DESCRIBE someTable;但是如果有一个更直接的方法可以使用编程方式而无需大量解析就可以了。

感谢。

3 个答案:

答案 0 :(得分:4)

SELECT
    column_type
FROM
    information_schema.columns
WHERE
    table_name = 'some_table'
AND
    column_name = 'some_column';

返回:

column_type
------------------
set('this','that')

答案 1 :(得分:3)

现在,这简直就是吓坏了,但它只是MySQL而且有效!

SELECT TRIM("'" FROM SUBSTRING_INDEX(SUBSTRING_INDEX(
   (SELECT TRIM(')' FROM SUBSTR(column_type, 5)) FROM information_schema.columns 
    WHERE table_name = 'some_table' AND column_name = 'some_column'),
',', @r:=@r+1), ',', -1)) AS item
FROM (SELECT @r:=0) deriv1,
(SELECT ID FROM information_schema.COLLATIONS) deriv2
HAVING @r <= 
   (SELECT LENGTH(column_type) - LENGTH(REPLACE(column_type, ',', ''))
    FROM information_schema.columns
    WHERE table_name = 'some_table' AND column_name = 'some_column');

只需为您的特定表/列替换“some_table”和“some_column”,然后看看魔术!

你会看到一个奇怪的用法“information_schema.COLLATIONS” - 这是因为我们需要一个表 - 任何表 - 包含至少N行,其中N是集合中元素的数量。

答案 2 :(得分:1)

下面的函数返回一个数组,其中包含SET的所有可用选项,但有一些解析但不是“大量解析”......:)

function get_set_values($table_name, $field_name)
{
    $sql = 'DESCRIBE ' . $table_name . ' ' . $field_name;
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    return str_getcsv( trim( substr( $row['Type'], 3 ), '()' ), ',', "'" );
}

请记住,在设置列中,您可能有值的组合,甚至是空值(这些也是有效的)。