웹이야기

Incorrect string value: '\xEC\xA0\x84\xEC\x9E\x90...' for column... 본문

D/MySQL

Incorrect string value: '\xEC\xA0\x84\xEC\x9E\x90...' for column...

yeon.Biju 2020. 3. 5. 09:44

Incorrect string value: '\xEC\xA0\x84\xEC\x9E\x90...' for column 'CL_CODE_NM' at row 1

 

테이블에 insert 구문으로 한글을 넣을려고 하는데 에러가 발생하였다. 

여러개의 MySQL을 다시 설치해가며 좀 살펴보게 되었는데.

 

윈도우용 MySQL - MySQL8.0.18, MySQL5.7.28

   - installer 버전, noinstaller(zip archive) 버전 모두 동일하게 위 에러가 나온다.

웹 플랫폼 관리자를 이용해서 설치한 MySQL - MySQL5.5.45 은 에러가 발생하지 않는다.

리눅스 소스 컴파일 MySQL - MySQL8.0.18, MySQL5.7.28 은 에러가 발생하지 않는다.

 

위 버전들을 설치해서 테스트를 진행해봤다 (yum 설치는 테스트 해보지 않았다.)

지금 다소 시간이 있다보니.... 쓸데없는 짓일수도 있지만.

 

1. 에러가 발생한 MySQL을 정리해보면 윈도우용 MySQL인데, 웹 플랫폼 관리자를 이용해서 설치한 경우에는 문제가 없었다.

 

2. 리눅스 소스 컴파일해서 설치한 것도 문제가 없었다. 컴파일 옵션 DEFAULT_CHARSET=utf8 이 들어가 있기 때문이 아닐까 한다.

MySQL 레퍼런스를 보니 charset을 변경할려면 컴파일을 다시 해야 한다고 한다. (이건 charset이 목록에 없는 경우를 말하는 거 아닐까 싶다.

 

서버를 설치하지 얼마되지 않은 상황에서 위 오류가 발생한다면 서버를 다시 설치하는 방법을 택할 것 같다. 나라면.

 

만약 윈도우에서 사용하게 된다면 웹플랫폼 관리자를 이용해서 설치한 버전을 가급적 사용하거나,

리눅스에서 컴파일한 버전을 사용하는 것을 선택할 것 같다.

 

하지만,

서버를 다시 설치하는 방법 외에도 당연히 방법은 있을 거 같아서 노력은 해봤다.

 

한글이 잘 들어가지 않는 경우의 환경설정을 확인해보면 아래와 같다. 

아래 쿼리로 출력되는 값은 버전에 따라서 좀 다를수도 있다.

 

mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | euckr                                  |
| character_set_connection | euckr                                  |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | euckr                                  |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | C:\mysql-5.7.28-winx64\share\charsets\ |
+--------------------------+----------------------------------------+
8 rows in set, 1 warning (0.05 sec)

 

 

반대로 한글이 잘 들어가는 경우의 환경설정을 보면 아래와 같다. 

 

mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)

 

 

character_sets_dir 을 제외한 나머지 경우를 비교해보면 차이가 있다. 

 

결론은 utf8로 바꿔주면 되는 것이다. 

euc-kr로 변경하는 방법은 전혀 고려 대상이 아니다.

 

그래서 설정파일을 변경하여 character-set을 변경하는 방법을 찾아봤다.

쿼리로 변경하는 것은 아닌 것 같다.

 

설정파일은 

1. 윈도우의 경우 my.ini

2. 리눅스의 경우 my.cnf 

이고, 이 파일들을 수정하거나 없으면 생성한다. 

 

아래 내용을 설정파일에 수정또는 추가한다.

 

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8

 

 

하고 나서  MySQL을 재시작하니 정상적으로 한글이 잘 들어가는 경우가 있다. 그렇지만 여전히 안되는 경우도 있다.

 

윈도우에 추가한 my.ini 파일도 첨부해본다. my.ini는 일단 C:\ 아래에 둔다. 그러면 MySQL이 시작할 때  c:\경로에 my.ini가 있는지 없는지 자동으로 스캔하여 설정파일을 적용하게 된다. 

 

my.ini
0.00MB

 

위 설정으로도 여전히 한글이 들어가지 않는 경우가 발생한다. 그래서 몇가지 비교를 해보고 내용을 정리해본다.

다만, 아래 내용이 정답은 아닐 것이니 상황에 따라 문제를 다르게 해결해 볼 수 있을 것이다. 

 

윈도우용 MySQL5.7.28 로 설정파일을 변경하여 테스트를 해보니 아래와 같은 결과값이 나왔다.

반면에 윈도우용 MySQL8.0.18my.ini 를 동일하게 설정하고 추가하여 테스트를 진행해해보면 한글이 잘 들어갔다.

 

mysql> show variables like '%char%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
character_set_database   latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.02 sec)

 

여전히 character_set_server 값과 character_set_database 값이 latin1  이다.

그 때문인지 한글이 잘 안들어간다.

다시 말하면 설정파일로서  character_set_servercharacter_set_database 값이 변경되지 않은 것이다. 

다만 윈도우용 MySQL8.0.18 값도 변경이 안되었지만 character_set_server 값과 character_set_database 값이 utf8mb4 이라는 것으로 되어 있다. 웬지 utf8을 포함하고 있어서 그런지 utf8을 잘 받아들여 문제가 발생하지 않았다.

 

나름 정리를 해보면...

 

그냥 다시 깔아준다.

 

1. 윈도우에서 사용하지 않아도 되는 경우라면 리눅스에서 소스 컴파일을 통해 원하는 버전을 설치한다.

 

2. 윈도우에서 꼭 사용해야 하는 상황이라면 웹 플랫폼 관리자를 이용한 MySQL 설치를 하는 방법을 선택하겠다.

   - 그러면 MySQL 버전이 5.5

 

3. 윈도우에서 보다 높은 버전을 사용해야 한다면 8.0이상을 설치를 하고 my.ini을 작성해서 넣는 방법을 선택하겠다.

   - character_set_database 와 character_set_server  가 utf8이 아닌 utf8mb4 이다. 웬지 이름이 비슷해서 그런지 잘 동작하는 것 같다. 

   - MySQL 8.x 를 사용하는 경우 자바에서는 mysql-connector 버전을 기존버전이 아닌 상위버전을 써야 한다. (당연 안쓰는 방법도 있긴 하지만...)

 


 

 

아래에 MySQL 설치하는 것에 대한 링크를 걸어둔다. 

 

 

MySQL 설치 - 웹 플랫폼 관리자를 이용

https://webobj.tistory.com/1

 

1. MySql 설치(윈도우 환경, MySQL5.5)

윈도우에서 MySql 설치하기 1) 먼저 웹 플랫폼 설치 관리자(Web Pl)를 설치한다. Web Platform Installer 가 5.1 로 업그레이 되어서 약간의 변경이 있을 수도 있겠다. https://web-obj.tistory.com/83 웹 플랫폼..

webobj.tistory.com

MySQL 소스 컴파일 설치

https://webobj.tistory.com/5

 

5. MySQL 설치(리눅스) - 소스 컴파일

MySQL 8.0.18 설치 MySQL 5.7.28 도 동일하게 설치를 진행해도 잘 되었다. 1. 이미 설치된 것이 있는지 없는지 확인 #ps -ef | grep mysql #rpm -qa | grep mysql 2. 다운로드(소스 버전을 다운로드 받는다) https..

webobj.tistory.com

 

MySQL 설치 - 윈도우, installer 버전  

https://webobj.tistory.com/48

 

MySQL 5.7 설치(windows 10 / installer 버전)

윈도우에서 MySQL5.7을 설치해보고자 한다. 1. installer 버전 다운로드 - installer 버전을 다운로드 받기 위해 아래 URL로 이동한다. https://downloads.mysql.com/archives/installer/ MySQL :: Download MySQL..

webobj.tistory.com

MySQL 설치 - 윈도우, noinstaller 버전 , zip(archive)

https://webobj.tistory.com/49

 

MySQL 5.7 설치(windows 10 / noinstaller 버전, zip archive)

1. MySQL 다운로드 - 다운로드는 아래 URL을 참조한다. https://webobj.tistory.com/33 MySQL 5.7 다운로드 윈도우용 MySQL installer 버전을 다운로드 받기 위해서는 아래 URL로 이동한다. https://downloads.mys..

webobj.tistory.com

 

 

Done.

'D > MySQL' 카테고리의 다른 글

MySQL 날짜 차이 TIMESTAMPDIFF()  (0) 2020.03.06
MySQL sorting 대소문자 구별  (0) 2020.03.06
MySQL 데이타베이스 생성 및 사용  (0) 2020.03.04
MySQL 현재 사용자  (0) 2020.03.04
MySQL 버전 확인  (0) 2020.03.04
Comments