iTerm2에서 SSH하고 MySQL Fucking하면 도하마했다.
예조
어쨌든 이전부터 EC2 인스턴스로 SSH 할 때
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
라든지 말해져 뭐라고 되어 있었습니다만, 특히 작업에 영향이 없기 때문에 방치하고 있었습니다. . .
뭔가 이상한
MySQL의 문자 코드 관계 설정
이 상태에서 서버의 MySQL에 로그인하면 문자 코드 관계 설정이 다음과 같습니다.
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
이런 식으로 말하면 문자 코드 관계의 경고였습니다.
export LC_CTYPE=ja_JP.UTF-8
내가 할 때 다음과 같이 되었기 때문에 안심
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/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
서버에서 파일을 편집하면 문자 코드가 불행하게도
서버상에서 SQL이 쓰여진 파일을 편집하고 있었습니다만, 상기의 경고가 나와 있는 상태로 편집했기 때문에? 파일의 문자 코드가 iso-2022-jp-3
라고 하는 낯선 것이 되어 버렸습니다.
일어난 일
MySQL에서 파일을 읽고 SQL을 실행하려고 시도했는데 오류가 발생했습니다.
mysql> source mask.sql
ERROR 1406 (22001): Data too long for column 'body' at row 6
작성된 SQL은 다음과 같습니다.
update foo set body = repeat('*', char_length(body));
하고 싶은 것은, body
컬럼의 내용을 같은 문자수의 *
로 옮겨놓고 싶은데, 왜 넘치는지 모른다. . .
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
MySQL의 문자 코드 관계 설정
이 상태에서 서버의 MySQL에 로그인하면 문자 코드 관계 설정이 다음과 같습니다.
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
이런 식으로 말하면 문자 코드 관계의 경고였습니다.
export LC_CTYPE=ja_JP.UTF-8
내가 할 때 다음과 같이 되었기 때문에 안심
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/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
서버에서 파일을 편집하면 문자 코드가 불행하게도
서버상에서 SQL이 쓰여진 파일을 편집하고 있었습니다만, 상기의 경고가 나와 있는 상태로 편집했기 때문에? 파일의 문자 코드가
iso-2022-jp-3
라고 하는 낯선 것이 되어 버렸습니다.일어난 일
MySQL에서 파일을 읽고 SQL을 실행하려고 시도했는데 오류가 발생했습니다.
mysql> source mask.sql
ERROR 1406 (22001): Data too long for column 'body' at row 6
작성된 SQL은 다음과 같습니다.
update foo set body = repeat('*', char_length(body));
하고 싶은 것은, body
컬럼의 내용을 같은 문자수의 *
로 옮겨놓고 싶은데, 왜 넘치는지 모른다. . .
mysql> source mask.sql
ERROR 1406 (22001): Data too long for column 'body' at row 6
update foo set body = repeat('*', char_length(body));
varchar
라는 글자수였던 것 같은가 char_length
라고 문자수 카운트야나라든지 다만, MySQL의 콘솔에서 직접 SQL을 타이프 해 실행하면 문제 없게 실행되었기 때문에, 저것??라고 되어 파일 재검토하면 문자 코드가
iso-2022-jp-3
가 되어 있었다고 한다. . .자신은
*
( U+FF0A )의 생각으로 치고 있었는데, 문자 코드의 차이에 의해 완전히 다른 캐릭터 라인으로 해석되어 버려 MySQL에 연주되고 있었다고. . .대응
하단의 환경 항목
Set locale variables automatically
하지만 처음부터 그랬는지 스스로 했는지 잘 모르겠지만, 체크가 끝난 것을 제외한다
그러면 LC_CTYPE
가 설정되지 않은 상태가되어 문제가 발생하지 않습니다.
요약
경고는 무시해 버립니다.
Reference
이 문제에 관하여(iTerm2에서 SSH하고 MySQL Fucking하면 도하마했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uraura/items/5d4ed2c8b47a46b93a22
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
경고는 무시해 버립니다.
Reference
이 문제에 관하여(iTerm2에서 SSH하고 MySQL Fucking하면 도하마했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uraura/items/5d4ed2c8b47a46b93a22텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)