mysql 테이블 열 데이터 유형을 얻는 방법은 무엇입니까?


103

mysql 테이블의 열 데이터 유형을 얻고 싶습니다.

MYSQLFIELD구조를 사용할 수 있다고 생각 했지만 열거 필드 유형이었습니다.

그런 다음 시도했습니다 mysql_real_query()

내가 받고있는 오류는 query was empty

열 데이터 유형은 어떻게 얻습니까?

답변:


116

information_schema 열 테이블을 사용할 수 있습니다 .

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

9
잊지 마세요 : AND INDEX_SCHEMA = '데이터베이스 _'
인샬라

나는 개인적으로 이것을 시도 했으며이 답변이 OP가 의도 한 바를 수행한다는 데 동의합니다. 참고로 매뉴얼에서도 "table_name"이 작은 대문자 인 것에 대해 조금 이상합니다. UPPER가 아니어야합니까? (그것이 차이를 만드는 것은 아닙니다)
chutsu

8
또한 데이터 유형에 설정된 길이가 있는지 확인하십시오. VARCHAR (50) SELECT COLUMN_TYPE추가 정보를 얻는 데 사용할 수 있습니다 .
chutsu

11
INDEX_SCHEMA 후 작동하지 않으면 것은 TABLE_SCHEMA = '데이터베이스 _'를 시도
senK

2
이 쿼리는 AND COLUMN_NAME = 'col_name'열 이름을 표시하지 않는 한 모든 열의 유형 (제거 ) 을 알고 자 할 때 쓸모가 없습니다 SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou

78

아래 쿼리는 MySQL 필드 유형을 포함하여 각 필드에 대한 정보 목록을 반환합니다. 다음은 예입니다.

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

참조 본 매뉴얼 페이지를 .


20
대안은 EXPLAIN tablename입니다.
hobodave

이 답변이 유형을 얻기 위해 추가 처리가 필요합니다 ... 대답의 user83591는 준 훨씬 더
chutsu은

WHERE FIELD = '<your column name>'단일 열 정보를 원하는 경우 추가하십시오 .
Placid

37

대부분의 답변은 중복되므로 그룹화하는 것이 유용 할 수 있습니다. 기본적으로 두 가지 간단한 옵션이 제안되었습니다.

첫 번째 옵션

첫 번째 옵션에는 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;

(주의 : 다른로서 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    |       |
+------------------+--------------+------+-----+---------+-------+

두 번째 옵션

두 번째 옵션은 조금 더 깁니다.

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)을 사용하여 열별로 선택할 수 있다는 장점이 있습니다.


20

모든 열의 데이터 유형을 가져 오려면 다음을 수행하십시오.

describe table_name

또는 단일 열 :

describe table_name column_name

당신이 이것을 할 수 있다는 것을 몰랐습니다. 당신은 정보 스키마를 뚫고 나에게 많은 것을 구했습니다.
Betty Mock

11

아래 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>' 

MySql 쿼리 결과


그러나 이것은 최대 길이 만 제공합니다. SELECT DATA_TYPE다른 답변에서 제안한 것처럼 사용하는 것이 더 낫지 않습니까?
파비오는 분석 재개 모니카 말한다

네, 맞아요. 추가하는 것을 잊었습니다. 이제 수정되었습니다. 감사합니다
Prasant 쿠마

5

링크를 참조하십시오

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

이것이 당신을 도울 수 있기를 바랍니다


3

먼저 사용하여 데이터베이스를 use testDB;선택한 다음 실행하십시오.

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

산출:

데이터 유형이있는 테이블 열 가져 오기


2

모든 데이터베이스에서 사용되는 열의 모든 데이터 유형을 찾기위한 쿼리

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

3
AND column_name like '%'불필요 하지 않습니까?
Skippy le Grand Gourou

1

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 ...
  */
?>

1
OP는이 질문에 php태그를
붙이지

1
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.
Rotimi

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.