본문 바로가기

django/오류

[Docker] Docker에서 Mysql 한글 설정하기

멋사 실습 중 

Docker로 임시 배포중 DB에 한글이 저장이 안돼서 오류가 발생했다.

AWS에 배포할때는 RDS 설정을 직접 수정하기 때문에 상관없지만...다덜 꼭 확인하고 싶어하고 알아두면 좋으니까

근데 내가 바꿔도 오류가 나서 시간 많이 뺏겼당 ㅎㅅㅎ


Mysql에 접속해서 DB 설정을 바꿔준다.

이전에 세션 준비할때는 간단한 프로젝트여서 ALTER TABLE (테이블명) convert to charset utf8; 를 이용해서 테이블 한두개만 한글로 설정을 바꿔주었다.

하지만 다른 사람들은 큰 프로젝트여서...테이블을 하나하나 바꾸는 건 거의 불가능하다.

일단 임시로 테이블 하나를 바꿔주었는데 연관된 다른 테이블에서 또 오류가 나고...(오류 난 테이블은 Django에서 알려줘서 확인이 가능하다.)

 

그래서 전체 DB를 한글로 바꾸어 주기로 했다.

status

status를 이용하면 현재 사용중인 db의 설정을 알수있다. 저기서 Sever, Db, Client, Conn을 utf8로 바꾸면 된다.

ALTER DATABASE 데이타베이스명 CHARACTER SET utf8 COLLATE utf8_general_ci;

이런식으로 바꿔주면 된다.

 

근데 다음 문제가 생겼다. 분명히 전체 DB를 한글 설정으로 바꾸어 주었는데..개별 테이블에 적용이 안된다!

서치해보니...Docker up을 하면서 처음부터 DB 설정을 한글로 하지않고 후에 바꾸게 되면 적용이 안될수도 있다고 한다.ㅜㅜ그래서 보통 MySQL의 기본 설정을 바꾸는 방식을 사용하는 듯 하다.MySQL/My.ini 파일에서 default character-set을 한글로 바꿔주자.(자세한건 아래에)편집은 vi 혹은 직접 파일을 찾아서 하거나...원하는 걸로https://hyunmin1906.tistory.com/85

 

[DB] MySQL 한글 인코딩 설정

■ MySQL 한글 인코딩 설정 1. my.ini 파일 경로 찾기 MySQL 접속 show variables like 'datadir%'; 입력 my.ini 파일 경로 찾기 2. my.ini 파일 열기 Mysql Server 경로로 이동 my.ini 파일을 메모장으로 열기 3. my.ini 파일

hyunmin1906.tistory.com

 

아니면 Docker 실행 파일에서 db를 한글 설정하는 명령어를 추가하면 되지 않을까.

라고 생각하고 찾아보니 역시 있다.

https://0soo.tistory.com/239

 

Docker MySQL 컨테이너 콘솔(터미널) 한글 입력 문제 해결

Docker MySQL Container 콘솔(터미널) 에서 한글 입력이 되지 않는 경우에 해결한 방법에 대해 기록합니다. 결론부터 말씀드리면, 컨테이너의 로케일 설정 때문입니다. 해당 컨테이너의 리눅스 배포판

0soo.tistory.com

 

이외에도 url을 추가하거나...여러 방법이 있는 듯.

 


부원들이 어떤 방식을 택했는지는...시간이 없어서 못봤다.

어쨌든 방법하고 에러 원인도 알았으니 해결했겠지...

 

그리고 오류를 봐주면서 느낀건데 Mysql 계정이 분리되어있다는 걸 약간 헷갈려하는 거 같다.

Mysql 로컬 계정으로 접속하고 Docker의 db를 수정하려하는...그런거? 에러의 대부분이 그런종류였다. 그러다보니 superuser계정도 접속이 안된다고....하지만 막상 db를 보면 유저는 없고....

 

 

나도 많이 헷갈린다. 지금도 사실 조금 헷갈리지만 알려주는 입장에서 헷갈리면 큰일나니까...

참 다양한 오류를 접하면서 실력이 는다.

한글 설정은 나중에 table을 바꾸는 방식 말고 다른 방식으로 시도해봐야지.

sudo docekr exec -it web python3 manage.py migrate

시스템SW실습 수업을 들으면서 linux의 명령어를 알아가고 있다.

추가로 docker명령어도 알게됐음. exec -it 은 다음 컨테이너 내에서 명령을 실행하라는 뜻이였다!

Linux 위에서 Docker를 설치하게 되니까...docker와 linux 명령어가 헷갈린다.(위에 linux 명령어인줄 알고 헤맸다.)

화이팅하자!