2020-12-04 19:32:49

MariaDB 또는 MySQL을 다루다보면, 한글 데이터가 삽입이 안되고 이런 에러를 만날 때가 있습니다.

 

 

우리 한국인들을 대상으로 어떠한 서비스를 제공하는 상황이라면 더더욱 한글 데이터 삽입이 안 되면 안되겠죠. 이때는 information_schema 데이터베이스 안에 schemata 테이블의 schema_name 컬럼과 default_character_set_name 컬럼을 살펴봐야 합니다. 참고로 information_schema는 MariaDB 설치시 자동으로 만들어지는 데이터베이스입니다. 어? 나 이런 데이터베이스 만든 적 없는데 하고 당황하실 필요없습니다. 

 

MariaDB [test]> SELECT schema_name, default_character_set_name FROM information_schema.schemata;

 

위와 같은 쿼리를 넘거주면, 다음과 같은 결과가 나올 것입니다. 

 

 

지금 저는 test 데이터베이스를 사용하고 있는데, 그 데이터베이스의 defualt_character_set_name이 다른 데이터베이스와는 달리 latin1로 되어 있음을 확인할 수 있습니다. 이래서 한글 데이터 insert가 안되었던 것입니다. 원인을 발견했으니 이제 해결해보겠습니다. 해결법은 저기에 있는 latin1을 utf8로 바꿔주는 것입니다. 

 

 

잘 바뀌었는지 확인해보겠습니다.

 

 

utf8로 잘 바뀌었죠? 그러면 한글 데이터를 다시 insert 해보겠습니다. 

 

 

불행히도, 아까와 똑같은 에러가 떴습니다. 이런 경우에는 지금 사용하는 테이블의 character set도 utf8로 바꿔줘야 합니다. 

 

MariaDB [test]> ALTER TABLE student CONVERT TO CHARACTER SET utf8;

 

여기서 student는 제가 사용하고 있는 테이블이름이니 각자의 테이블이름으로 대체해주시면 되겠습니다. 

 

 

잘 바뀌었는지 확인해보겠습니다. 확인하는 코드는 조금 깁니다.

 

MariaDB [test]> 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 = "test" AND T.table_name = "student";

 

여기서 맨 밑에 "test"는 본인의 데이터베이스 명으로, "student"는 본인의 테이블 명으로 바꿔주시면 됩니다. 

 

 

보시다시피 utf8로 잘 바뀌었습니다. 이제 한글이 insert되는지 다시 한번 확인해보겠습니다. 

 

 

드디어 한글입력이 됩니다!

 

 

<참고자료>

[1] www.lesstif.com/dbms/mysql-database-table-character-set-17105743.html, "MySQL database와 table의 character set 확인하는 법"