MySQL 데이터베이스 / 테이블 / 열이 어떤 문자 세트인지 어떻게 알 수 있습니까?


답변:


743

내가하는 방법은 다음과 같습니다.

스키마 (또는 데이터베이스-동의어)의 경우 :

SELECT default_character_set_name FROM information_schema.SCHEMATA 
WHERE schema_name = "schemaname";

테이블의 경우 :

SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "schemaname"
  AND T.table_name = "tablename";

열의 경우 :

SELECT character_set_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "schemaname"
  AND table_name = "tablename"
  AND column_name = "columnname";

3
information_schema는 MySQL 5 이상에만 있다고 생각합니다.
Vex

4
지금까지 내가 당신이 MySQL을 <5 열 특정 문자 집합 정보를 검색에 얻을 수있는 가장 가까운 말할 수있는 TABLENAME FROM SHOW FULL 열을하는 것입니다
로빈 윈 슬로

14
이 답변은 매우 도움이되었지만 character_set / collation 문제를 해결하려면 문제 character_set, client_character_set 등을 확인해야합니다. : SHOW VARIABLES LIKE 'character_set %'; 'collation %'와 같은 변수 표시
BenL

2
테이블 작업이 나를 위해 "빈 세트 (0.00 초)"를 반환 함
minhajul

9
Schema-Dummies의 경우 : schemaname데이터베이스 이름 일 수 있습니다.
BurninLeo

465

대한 :

SHOW FULL COLUMNS FROM table_name;

43
안녕하세요, 이것은 미래의 말하기입니다! 이 답변을 확인하는 사람이라면이 방법은 문자 세트가 아닌 데이터 정렬 만 표시합니다. 나는 이것이 MySQL 5에서 바뀌 었다고 생각합니다 (더 나은 방법은 더 많은 답변을 참조하십시오).
fideloper

20
@fideloper, 데이터 정렬을 사용하면 문자 집합을 알 수 있습니다. 데이터 정렬의 첫 번째 부분에 문자 집합이 포함되어 있기 때문입니다. 예를 들어 데이터 정렬이 latin1_swedish_ci인 경우 문자 집합은 이외의 다른 문자 일 수 없습니다 latin1. 데이터 정렬이 utf8mb4_general_ci이면 문자셋은 이외의 다른 문자 일 수 없습니다 utf8mb4.
Pacerier

1
테이블 문자 세트를 알려줍니다. 테이블 작성 구문에 문자 세트가 지정되지 않은 경우 미래에 작성된 테이블 세트를 알려주지 않습니다 (스키마 문자 세트가 필요함).
HoldOffHunger 2016 년

217

대한 데이터베이스 :

USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";

Cf. 이 페이지 . 그리고 MySQL 매뉴얼을 확인하십시오


3
이것은 질문의 1/3에만 답합니다.
Tobias J


CF는 무엇을 의미합니까? 링크는 존재하지 않습니다. @Pacerier
Yannis Dran

이것은 최상위 답변에 병합되어야합니다. 정말 도움이되었습니다.
beppe9000

150

서버에있는 모든 데이터베이스의 경우 :

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

산출:

+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| my_database                | latin1  | latin1_swedish_ci  |
...
+----------------------------+---------+--------------------+

A에 대한 하나의 데이터베이스 :

mysql> USE my_database;
mysql> show variables like "character_set_database";

산출:

    +----------------------------+---------+
    | Variable_name              |  Value  |
    +----------------------------+---------+
    | character_set_database     |  latin1 | 
    +----------------------------+---------+

테이블에 대한 데이터 정렬 가져 오기 :

mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';

OR-작성 테이블에 대한 전체 SQL을 출력합니다.

mysql> show create table my_tablename


데이터 정렬 가져 오기 :

mysql> SHOW FULL COLUMNS FROM my_tablename;

산출:

+---------+--------------+--------------------+ ....
| field   | type         | collation          |
+---------+--------------+--------------------+ ....
| id      | int(10)      | (NULL)             |
| key     | varchar(255) | latin1_swedish_ci  |
| value   | varchar(255) | latin1_swedish_ci  |
+---------+--------------+--------------------+ ....

어떤 버전의 mysql이이 출력을 보여줍 type니까? 나는 MySQL은 5.7.9가와 typedata type열의를하지를 character set. 같은 일부 int(10) varchar(255)등 ...이 아니라utf8
MTK

내 출력 쇼 type(가)로 data type잘 @MTK로, 아마 위의 복사 붙여 넣기 오류입니다 "출력"섹션.
tronmcp '

65

들어 테이블 :

SHOW TABLE STATUS 모든 테이블을 나열합니다.

다음을 사용하여 필터링 :

SHOW TABLE STATUS where name like 'table_123';

9
양해 바랍니다. 테이블 표시 상태에 표시된 데이터 정렬은 테이블의 문자 집합이 아닙니다. 데이터 정렬은 문자 정렬 / 비교 방법을 알려줍니다. 예를 들어 utf8_bin_ci는 대소 문자를 구분하지 않고 데이터를 비교합니다 (대소 문자를 구분하지 않으므로 "m"과 "M"은 동일 함), utf8_bin_cs는 대소 문자를 구분합니다 (따라서 "m"과 "M"은 구별됩니다). 이것은 테이블의 문자 집합과 동일하지 않습니다.
Daan

6
@Daan, 잘못된 정보 확산 중지. 데이터 정렬과 함께 문자 집합을 말할 수있는 stackoverflow.com/questions/1049728/…을 참조하십시오 .
Pacerier

44

대한 데이터베이스 :

다음 명령을 사용하십시오.

USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;

34
SELECT TABLE_SCHEMA,
       TABLE_NAME,
       DEFAULT_CHAR_SET로 CCSA.CHARACTER_SET_NAME,
       COLUMN_NAME,
       COLUMN_TYPE,
       C.CHARACTER_SET_NAME
  information_schema.TABLES AS T에서
  information_schema.COLUMNS AS C를 사용하여 참여 (TABLE_SCHEMA, TABLE_NAME)
  CCSA로 information_schema.COLLATION_CHARACTER_SET_APPLICABILITY에 가입
       ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 WHERE TABLE_SCHEMA = SCHEMA ()
   AND C.DATA_TYPE IN ( 'enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext')
 ORDER BY TABLE_SCHEMA,
          TABLE_NAME,
          COLUMN_NAME
;

2
에릭 해당 코드를 mysql 명령 행에 붙여넣고 return 키를 누르면 모든 데이터베이스의 모든 테이블에있는 모든 열의 문자 세트가 표시됩니다.)
Jerry Krinock

1
@JerryKrinock 현재 데이터베이스의 모든 열을 가져 오며 데이터베이스를 선택하지 않으면 아무 것도 얻지 못합니다.
Ortomala Lokni

24

난 항상 봅니다 SHOW CREATE TABLE mydatabase.mytable.

데이터베이스의 경우를 참조해야합니다 SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.


3
mysql 데이터베이스에서 기본 문자 집합을 가질 수 있음
James

3
select default_character_set_name from information_schema.schemata어떤 행이 어떤 데이터베이스와 관련되는지 알 수 없기 때문에 충분하지 않습니다. 사용 select default_character_set_name,schema_name from information_schema.schemata하거나 간단히 : select*from information_schema.schemata.
Pacerier

나는 사용 SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; 했고 그것은 훌륭하게 일했다 :) 감사합니다!
Sankalp

23

데이터베이스의 기본 데이터 정렬을 보려면

USE db_name;
SELECT @@character_set_database, @@collation_database;

테이블의 데이터 정렬을 보려면

SHOW TABLE STATUS where name like 'table_name';

열의 데이터 정렬을 보려면

SHOW FULL COLUMNS FROM table_name;

21

들어 테이블 :

show create table your_table_name

2
현재 테이블을 작성하는 데 사용될 전체 SQL을 알려줍니다. 여기에는 문자 세트가 포함되어야합니다.
James

또한 열에 특정 문자 집합이 없으면 테이블의 기본 문자 집합을 사용하는 것입니다.
Pacerier

18

대한 데이터베이스 :

SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

출력 예 :

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| drupal_demo1               | utf8    | utf8_general_ci    |
| drupal_demo2               | utf8    | utf8_general_ci    |
| drupal_demo3               | utf8    | utf8_general_ci    |
| drupal_demo4               | utf8    | utf8_general_ci    |
| drupal_demo5               | latin1  | latin1_swedish_ci  |

...

+----------------------------+---------+--------------------+
55 rows in set (0.00 sec)

mysql> 

이것이 topstackoverflow.com/a/1049753/632951 에 대한 첫 번째 대답 이 반복되지 않습니까?
Pacerier

1
@Pacerier 실제로 내 답변을 이것들과 올바르게 비교 했습니까?
sjas

15

대한 데이터베이스 :

SHOW CREATE DATABASE "DB_NAME_HERE";

데이터베이스 작성 (MySQL)에서 기본 문자 세트 / 콜 레이션은 항상 라틴입니다. 대신 데이터베이스를 처음 작성할 때 다른 문자 세트를 선택하십시오.


3
표창장은 필요 에 대해 "기본 문자 집합 / 정렬이 항상 라틴는" MySQL의에.
Pacerier

인용이 필요하십니까? MySQL 데이터베이스를 사용해 본 적이 있습니까? 기본 캐릭터 세트 / latin1_swedish_ci콜 레이션은 MySQL을 만든 Monty Widenius가 스웨덴어이기 때문에 시작했을 때의 큰 그림으로 생각하지 않았기 때문입니다.
스펜서 윌리엄스

5

많은 사람들이 이전에 썼 듯이 SHOW FULL COLUMNS는 열 정보를 얻는 데 선호되는 방법이어야합니다. 누락 된 것은 메타 데이터 테이블에 직접 도달하지 않고 그 후에 문자 집합을 얻는 방법입니다.

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.