손만이의 개발노트

[Mysql] information_schema 로 character_set 검색 본문

데이터베이스

[Mysql] information_schema 로 character_set 검색

sonman 2020. 4. 9. 10:58

information_schema는 데이터베이스에 속한 메타 정보들 (db,테이블,컬럼 등등)을 기록하는 스키마이다.

| CHARACTER_SETS : 사용가능한 모든 문자 셋에 대한 정보를 가지고 있다.
| COLLATIONS : 사용 가능한 모든 콜레션에 대한 정보를 가지고 있다. 콜레션은 데이터베이스에 저장된 값들을 비교, 검색하거나 정렬 등의 작업을 위해 문자들을 서로 비교할 때 사용하는 규칙들의 집합이다.
| COLLATION_CHARACTER_SET_APPLICABILITY : 어떤 콜레션에 어떤 문자열 세트가 적용되는지를 표시한다.
| COLUMNS : 테이블 칼럼의 콜레션 정보를 가지고 있다. 칼럼이라도 char, varchar, text 형태의 컬럼은 콜레션을 가진다. 비문자 타입은 콜레션을 가지지 않는다.
| COLUMN_PRIVILEGES : 테이블 칼럼 권한에 대한 정보를 제공한다.
| KEY_COLUMN_USAGE : 제약사항을 가지고 있는 키 컬럼에 대한 정보를 제공한다.
| REFERENTIAL_CONSTRAINTS : 
| ROUTINES : 스토어드 루틴에 대한 정보를 제공한다. 스토어드 루틴이란 DB상에 저장이 가능한 SQL 구문이다.(프로시저, 함수 포함)
| SCHEMATA : 하나의 스키마는 하나의 데이터베이스다. SCHMATA는 데이터베이스의 정보를 제공한다.
| STATISTICS : 테이블 인덱스에 대한 정보를 제공한다.
| TABLES : 데이터베이스에 존재하는 테이블에 대한 정보를 제공한다.
| TABLE_CONSTRAINTS : 테이블에 대한 제약사항에 대한 정보를 제공한다.
| TRIGGERS : 트리거에 대한 정보를 제공한다. 트리거란 테이블에 대한 이벤트에 반응하여 자동으로 실행되는 작업을 의미한다.
| USER_PRIVILEGES : 글로벌 권한에 대한 정보를 제공한다. 글로벌 권한은 모든 데이터베이스에 대한 권한이 주어지는 권한이다.
| VIEWS : DB에 있는 뷰에 대한 정보를 제공한다.

이런 정보들을 가지고 있다.

 

오늘의 문제는 특정 테이블에 character_set들이 이상한거 같다고 확인해 달라는 문의가 있었다.

1.특정 테이블의 컬럼의 charset을 검색할때.
SELECT character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb"
  AND table_name = "mytable"
  AND column_name = "mycolumn";
  
2.모든 테이블 중에서 내가 원하는 charset이 있는지 보려고 할때
SELECT distinct character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb";

3.이런식으로 쿼리를 조회하면 전체 테이블 정보 확인 가능
SELECT * FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb";

이런식으로 확인하면 된다.