일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 방화벽
- SVN
- Date and Time Function
- String Functions and Date Operators
- MySQL
- Oracle
- Date and Time Functions
- 전자정부 표준프레임워크
- Data and Time Functions
- 윈도우
- HTTP
- Sring Functions and Operators
- Tibero
- 전자정부표준프레임워크
- String Function and Operators
- String Functions and Operators
- 오라클
- 티베로
- Today
- Total
웹이야기
Incorrect string value: '\xEC\xA0\x84\xEC\x9E\x90...' for column... 본문
Incorrect string value: '\xEC\xA0\x84\xEC\x9E\x90...' for column...
yeon.Biju 2020. 3. 5. 09:44Incorrect 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가 있는지 없는지 자동으로 스캔하여 설정파일을 적용하게 된다.
위 설정으로도 여전히 한글이 들어가지 않는 경우가 발생한다. 그래서 몇가지 비교를 해보고 내용을 정리해본다.
다만, 아래 내용이 정답은 아닐 것이니 상황에 따라 문제를 다르게 해결해 볼 수 있을 것이다.
윈도우용 MySQL5.7.28 로 설정파일을 변경하여 테스트를 해보니 아래와 같은 결과값이 나왔다.
반면에 윈도우용 MySQL8.0.18 로 my.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_server 과 character_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 설치 - 웹 플랫폼 관리자를 이용
MySQL 소스 컴파일 설치
MySQL 설치 - 윈도우, installer 버전
MySQL 설치 - 윈도우, noinstaller 버전 , zip(archive)
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 |