iTerm2에서 SSH하고 MySQL Fucking하면 도하마했다.

3857 단어 SSHMySQLMaciTerm2

예조



어쨌든 이전부터 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 컬럼의 내용을 같은 문자수의 로 옮겨놓고 싶은데, 왜 넘치는지 모른다. . .
  • varchar 라는 글자수였던 것 같은가
  • char_length 라고 문자수 카운트야나라든지

  • 다만, MySQL의 콘솔에서 직접 SQL을 타이프 해 실행하면 문제 없게 실행되었기 때문에, 저것??라고 되어 파일 재검토하면 문자 코드가 iso-2022-jp-3 가 되어 있었다고 한다. . .

    자신은 ( U+FF0A )의 생각으로 치고 있었는데, 문자 코드의 차이에 의해 완전히 다른 캐릭터 라인으로 해석되어 버려 MySQL에 연주되고 있었다고. . .

    대응





    하단의 환경 항목

    Set locale variables automatically
    하지만 처음부터 그랬는지 스스로 했는지 잘 모르겠지만, 체크가 끝난 것을 제외한다

    그러면 LC_CTYPE가 설정되지 않은 상태가되어 문제가 발생하지 않습니다.

    요약



    경고는 무시해 버립니다.

    좋은 웹페이지 즐겨찾기