如何获取mysql表列的数据类型?

kri*_*mar 80 mysql

我想获取mysql表的列数据类型.

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

然后我尝试了 mysql_real_query()

我得到的错误是 query was empty

如何获取列数据类型?

bri*_*zil 90

您可以使用information_schema列表:

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
Run Code Online (Sandbox Code Playgroud)

  • 如果INDEX_SCHEMA不起作用,请尝试TABLE_SCHEMA ='database_name' (10认同)
  • 别忘了:AND INDEX_SCHEMA ='database_name' (9认同)
  • 另请注意,如果数据类型具有设定长度,例如.VARCHAR(50)可以使用`SELECT COLUMN_TYPE`来获取额外的信息. (5认同)
  • 如果您想知道所有列的类型(删除 `AND COLUMN_NAME = 'col_name'`),除非您显示列名:`SELECT COLUMN_NAME, DATA_TYPE FROM etc.`,否则此查询是无用的。 (2认同)

Jam*_*ore 68

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

SHOW FIELDS FROM tablename
/* returns "Field", "Type", "Null", "Key", "Default", "Extras" */
Run Code Online (Sandbox Code Playgroud)

请参阅本手册页.

  • 另一种方法是EXPLAIN tablename; (18认同)

Ski*_*rou 29

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

第一种选择

第一个选项有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;
Run Code Online (Sandbox Code Playgroud)

(注意:作为替代db_name.table_name,可以使用第二个FROM :)db_name FROM table_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    |       |
+------------------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

第二种选择

第二个选项有点长:

SELECT
  COLUMN_NAME, DATA_TYPE 
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_SCHEMA = 'db_name'
AND
  TABLE_NAME = 'table_name';
Run Code Online (Sandbox Code Playgroud)

它也不那么健谈了:

+------------------+-----------+
| column_name      | DATA_TYPE |
+------------------+-----------+
| product_id       | int       |
| name             | varchar   |
| description      | text      |
| meta_title       | varchar   |
+------------------+-----------+
Run Code Online (Sandbox Code Playgroud)

它具有允许每列选择使用AND COLUMN_NAME = 'column_name'(或like)的优点.


jon*_*ham 15

要获取所有列的数据类型:

describe table_name
Run Code Online (Sandbox Code Playgroud)

或者只是一列:

describe table_name column_name
Run Code Online (Sandbox Code Playgroud)


Pra*_*mar 7

请使用以下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>' 
Run Code Online (Sandbox Code Playgroud)

MySql查询结果


son*_*mas 5

请参阅此链接

mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮到你


p u*_*ran 5

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

desc `testDB`.`images`;
-- or
SHOW FIELDS FROM images;
Run Code Online (Sandbox Code Playgroud)

输出:

使用数据类型获取表列