【问题标题】:How to get the mysql table columns data type?如何获取mysql表列数据类型?
【发布时间】:2009-07-31 23:33:04
【问题描述】:

我想获取一个mysql表的列数据类型。

以为我可以使用MYSQLFIELD 结构,但它是枚举字段类型。

然后我尝试使用mysql_real_query()

我得到的错误是query was empty

如何获取列数据类型?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用information_schema columns 表:

    SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
    

    【讨论】:

    • 别忘了:AND INDEX_SCHEMA = 'database_name'
    • 我亲自尝试过,并且同意这个答案确实符合 OP 的意图。附带说明一下,即使在手册中,“table_name”是小型大写字母也有点奇怪,它不应该是大写吗? (并不是说它有什么不同)
    • 还要注意数据类型是否具有设定的长度,例如。 VARCHAR(50) 可以使用SELECT COLUMN_TYPE 获取额外信息。
    • 如果 INDEX_SCHEMA 不起作用,请尝试 TABLE_SCHEMA = 'database_name'
    • 当您想知道所有列的类型(删除AND COLUMN_NAME = 'col_name')时,此查询无用,除非您显示列名称:SELECT COLUMN_NAME, DATA_TYPE FROM etc.
    【解决方案2】:

    下面的查询返回有关每个字段的信息列表,包括 MySQL 字段类型。这是一个例子:

    SHOW FIELDS FROM tablename
    /* returns "Field", "Type", "Null", "Key", "Default", "Extras" */
    

    this manual page

    【讨论】:

    • 另一种选择是 EXPLAIN 表名;
    • 这个答案需要进一步处理才能得到类型...... user83591给出的答案要好得多
    • 如果您想要单列信息,请添加 WHERE FIELD = '<your column name>'
    【解决方案3】:

    大多数答案都是重复的,将它们分组可能会很有用。基本上已经提出了两个简单的选择。

    第一个选项

    第一个选项有 4 个不同的别名,其中一些很短:

    EXPLAIN db_name.table_name;
    DESCRIBE db_name.table_name;
    SHOW FIELDS FROM db_name.table_name;
    SHOW COLUMNS FROM db_name.table_name;
    

    注意:在每种情况下,你也可以写两次FROM而不是db_name.table_name,例如:

    SHOW FIELDS FROM table_name FROM db_name
    

    这给出了类似的东西:

    +------------------+--------------+------+-----+---------+-------+
    | Field            | Type         | Null | Key | Default | Extra |
    +------------------+--------------+------+-----+---------+-------+
    | product_id       | int(11)      | NO   | PRI | NULL    |       |
    | name             | varchar(255) | NO   | MUL | NULL    |       |
    | description      | text         | NO   |     | NULL    |       |
    | meta_title       | varchar(255) | NO   |     | NULL    |       |
    +------------------+--------------+------+-----+---------+-------+
    

    第二个选项

    第二个选项有点长:

    SELECT
      COLUMN_NAME, DATA_TYPE 
    FROM
      INFORMATION_SCHEMA.COLUMNS 
    WHERE
      TABLE_SCHEMA = 'db_name'
    AND
      TABLE_NAME = 'table_name';
    

    它也不那么健谈:

    +------------------+-----------+
    | column_name      | DATA_TYPE |
    +------------------+-----------+
    | product_id       | int       |
    | name             | varchar   |
    | description      | text      |
    | meta_title       | varchar   |
    +------------------+-----------+
    

    不过,它的优点是允许使用AND COLUMN_NAME = 'column_name'(或like)选择每列。

    【讨论】:

      【解决方案4】:

      首先使用use testDB;选择数据库然后执行

      desc `testDB`.`images`;
      -- or
      SHOW FIELDS FROM images;
      

      输出:

      【讨论】:

        【解决方案5】:

        请使用下面的mysql查询。

        SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
        FROM information_schema.columns 
        WHERE table_schema = '<DATABASE NAME>' 
        AND table_name = '<TABLE NAME>' 
        AND COLUMN_NAME = '<COLOMN NAME>' 
        

        【讨论】:

        • 但这只会给出最大长度。正如其他答案所建议的那样,使用SELECT DATA_TYPE 不是更好吗?
        • 是的,你是对的。我只是忘了添加它。我现在纠正了它。谢谢
        【解决方案6】:

        获取所有列的数据类型:

        describe table_name
        

        或者只是一列:

        describe table_name column_name
        

        【讨论】:

        • 不知道你能做到这一点。你刚刚为我省去了一堆遍历信息架构的麻烦。
        【解决方案7】:
        SELECT 
        TABLE_CATALOG,
        TABLE_SCHEMA,
        TABLE_NAME, 
        COLUMN_NAME, 
        DATA_TYPE 
        FROM INFORMATION_SCHEMA.COLUMNS 
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案8】:

        SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='SCHEMA_NAME' AND COLUMN_KEY='PRI'; WHERE COLUMN_KEY='PRI';

        【讨论】:

          【解决方案9】:

          参考这个link

          mysql> SHOW COLUMNS FROM mytable FROM mydb;
          mysql> SHOW COLUMNS FROM mydb.mytable;
          

          希望对你有帮助

          【讨论】:

            【解决方案10】:

            查询以找出任何数据库中正在使用的列的所有数据类型

            SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
            WHERE table_schema = '<db_name>' AND column_name like '%';
            

            【讨论】:

            • AND column_name like '%' 不是多余的吗?
            【解决方案11】:

            显示来自 mytable 的列

            自包含的完整示例通常很有用。

            <?php
              // The server where your database is hosted                 localhost
              // The name of your database                                mydatabase
              // The user name of the database user                       databaseuser
              // The password of the database user                        thesecretpassword
              // Most web pages are in utf-8 so should be the database    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
              try
              {
                $pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "databaseuser", "thesecretpassword", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));  
              }
                catch(PDOException $e)
              {
                die('Could not connect: ' . $e->getMessage());
              }
            
              $sql   = "SHOW COLUMNS FROM mytable";
              $query = $pdo->prepare($sql);
              $query->execute();
            
              $err = $query->errorInfo();
              $bug = $err[2];
            
              if ($bug != "") { echo "<p>$bug</p>"; }
            
              while ($row = $query->fetch(PDO::FETCH_ASSOC))
              {
                echo "<pre>" . print_r($row, true) . "</pre>";
              }
            
              /* OUTPUT SAMPLE  
              Array
              (
                  [Field] => page_id
                  [Type] => char(40)
                  [Null] => NO
                  [Key] => 
                  [Default] => 
                  [Extra] => 
              )
            
              Array
              (  
                  [Field] => last_name
                  [Type] => char(50)
                  More ...
              */
            ?>
            

            【讨论】:

            • OP 没有用php 标签标记这个问题
            【解决方案12】:
            ResultSet rs = Sstatement.executeQuery("SELECT * FROM Table Name");
            
            ResultSetMetaData rsMetaData = rs.getMetaData();
            
            int numberOfColumns = rsMetaData.getColumnCount();
            System.out.println("resultSet MetaData column Count=" + numberOfColumns);
            
            for (int i = 1; i <= numberOfColumns; i++) {
             System.out.println("column number " + i);
            
              System.out.println(rsMetaData.getColumnTypeName(i));
            }
            

            【讨论】:

            • OP 没有用java 标签标记这个问题。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-11
            相关资源
            最近更新 更多