[sql] MySQL 데이터베이스 인코딩을 UTF-8로 변경하는 방법

MySQL은 UTF-8 문자 인코딩을 지원하지만 데이터베이스 및 테이블을 생성할 때 기본 문자 인코딩으로 Latin 문자 인코딩으로 설정되어 있는 경우가 자주 있습니다. 이럴 경우 문자 인코딩을 UTF-8로 변경해야 한글 처리를 정확하게 할 수 있습니다.

데이터베이스 인코딩 정보 확인


MySQL 데이터베이스 또는 테이블에서 현재 사용 중인 문자 인코딩은 다음 단계로 확인할 수 있습니다.

  1. MySQL 서버가 실행중인 호스트에 로그인합니다.
  2. MySQL 커맨드 프롬프트를 실행합니다. "username"은 현재 사용하는 DB 계정으로 바꿉니다.

    mysql -u username -p
  3. Enter Password 프롬프트에서 비밀번호를 입력합니다. 비밀번호를 입력하면 mysql> 프롬프트가 나타납니다.
  4. 특정 데이터베이스의 현재 문자 인코딩을 확인하려면 mysql> 프롬프트에서 다음 명령을 입력합니다. "dbname"은 실제 데이터베이스 이름으로 바꿉니다.

    SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "dbname";

  5. 데이터베이스의 특정 테이블의 현재 문자 인코딩을 확인하려면 mysql> 프롬프트에서 다음 명령을 입력합니다. dbname은 테이블이 들어있는 데이터베이스 이름으로, tablename은 인코딩을 확인할 테이블 이름으로 바꿉니다.

    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 = "dbname" AND T.table_name = "tablename";
  6. mysql 명령 프롬프트를 빠저나가려면 "\q"를 입력하면 됩니다.

문자 인코딩을 UTF-8로 변환

문자 인코딩을 변환하기 전에 반드시 데이터베이스, 또는 변환하는 테이블을 백업해야 합니다. 예기치 않은 오류, 또는 제약으로 인해 변환에 문제가 생길 경우 원본 데이터로 복구를 할 수 있어야 합니다.

[sql] MySQL 데이터베이스 내보내기와 가져오기 - 백업과 복원
MySQL 데이터베이스를 백업하려면 mysqldump 명령어를 사용하고, 복원할 때는 mysql 명령어를 활용합니다. 에러는 주로 권한, 데이터베이스 미존재, SQL 문법 오류 등으로 발생하며 각각에 대한 조치가 필요합니다. - MySQL 데이터베이스 내보내기 - MySQL 데이터베이스 복원 - MySQL 데이터베이스 복원할 때 발생하는 에러 메시지들

  1. MySQL 데이터베이스 서버가 실행중인 호스트로 로그인합니다.
  2. .my.cnf라는 새 텍스트 파일을 만듭니다. Vi 또는 Nano와 같은 텍스트 편집기로 파일을 만들 수 있습니다.

    vi .my.cnf
  3. 파일에 다음 줄을 추가하고 "username"을 실제 사용하는 DB 계정으로, 비밀번호에는 DB 계정의 비밀번호를 입력합니다. 비밀번호는 쌍따옴표로 묶어서 표시해야 합니다.

    [client]
    user=username
    password="password"


    입력 내용을 저장한 후 편집기를 빠져나갑니다.
  4. 명령 줄에서 다음 명령을 사용하여 지정된 데이터베이스의 모든 테이블에 대한 문자 집합 인코딩을 UTF-8로 변경합니다. dbname을 데이터베이스 이름으로 바꿉니다.

    mysql --database=dbname -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=dbname
  5. 명령이 완료되면 mysql 프로그램을 시작하려면 명령 줄에서 다음 명령을 입력합니다.

    mysql
  6. mysql> 프롬프트에서 다음 명령을 사용하여 데이터베이스 자체의 문자 집합 인코딩을 UTF-8로 변경합니다. dbname을 데이터베이스 이름으로 바꿉니다.

    ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
  7. mysql 프로그램을 종료하려면 mysql> 프롬프트에서 \q를 입력합니다.

문자 인코딩이 올바르게 변경되었는지 앞서의 인코딩 정보 확인 방법으로 확인합니다.