MySQL에서 가져온 데이터가 깨져서 시도한 것

2822 단어 MySQLDBmariadb

소개



MySQL (엄밀하게는 MariaDB)에서 일본어를 포함한 CSV 파일을 가져 왔지만,
select 문으로 그것을 표시시켰을 때, 일본어 부분이 깨져 버렸다.
결함의 상세와 해결을 향해 시험한 것, 해결책에 대해서 비망록도 겸해 적는다.

환경


  • XAMPP
  • MariaDB
  • 명령 프롬프트

  • (버전 등은 후술하는 바와 같이 재설치했기 때문에 불명.)

    발생한 결함



    tb2.csv
    A106,中村,26
    A107,田中,24
    A108,鈴木,23
    A109,村井,25
    A110,吉田,27
    

    라는 파일을 MariaDB에서 읽었다.
    load data infile "db1\\tb2.csv" into table tb2 fields terminated by ",";
    

    덧붙여서, 기입하는 테이블의 컬럼은 이하.
    bang varchar(10)
    nama varchar(10)
    tosi int
    

    출력 결과 및 오류 문
    +------+--------+------+
    | bang | nama   | tosi |
    +------+--------+------+
    | A106 | 荳ュ譚・|   26 |
    | A107 | 逕ー荳ュ |   24 |
    | A108 | 驤エ譛ィ |   23 |
    | A109 | 譚台コ・|   25 |
    | A110 | 蜷臥伐 |   27 |
    +------+--------+------+
    



    시도한 것



    재부팅



    XAMPP Control Panel의 해당 지점을 다시 시작했습니다.
    구체적으로는 MySQL 행의 Stop 버튼을 클릭.


    CSV 파일의 문자 코드 확인 / 재 작성



    사쿠라 에디터를 사용하여 Shift-JIS와 UTF-8로 변경하여 저장하고 다시 가져왔다.

    데이터베이스 설정 확인 / 재 작성


    show variables like "chara%";
    

    이 명령을 사용하여 데이터베이스에 설정된 명령을 확인했습니다.
    여기서는 Variable_name이 character_set_database 인 항목의 Value에 대해 확인.

    그 후,
    SET character_set_database=utf8
    

    를 사용하여 character_set_database를 UTF-8로 다시 작성했습니다.
    또 "utf8"부분을 cp932(=Shift JIS에 대응)에도 재기록,
    각각에 맞춰 CSV 파일의 문자 코드도 UTF-8이나 Shift-JIS로 변경해 보았다.

    my.ini 파일 재작성



    MariaDB의 초기 문자 코드를 설정하는 것 같습니다.

    여기 등을 참조.

    XAMPP 재설치



    파일이 손상되었거나 버전이 오래된 등의 원인인지 확인하는 의도.
    재설치 전 버전 등은 메모를 잊었다.

    해결로 이어진 방법



    여러가지 시도하고, 이 방법만으로 해결했는지라고 하면 확약은 할 수 없지만
    결론에서 말하면, 버그의 원인은 MySQL측이 아니라 콘솔측에 존재하고 있었던 것 같다.

    MariaDB에서 파일을 가져온 것이 좋지만 명령 프롬프트에서 문자 코드를 처리 할 때,
    명령 프롬프트에 설정된 문자 코드와 다르기 때문에 문자 깨짐이 발생했을 수 있습니다.

    해결을 위해 CSV 파일의 문자 코드를 흩어져 변경하고 시도하고 있으므로,
    명령 프롬프트의 설정 문자 코드와 CSV 파일의 문자 코드가 일치하는 패턴이 있어도 이상하지 않습니다.
    그렇다면 더 빠른 단계에서 문제가 해결되어도 이상하지 않을 것.
    따라서 이것만이 원인이었는지라고 하면 의문이 남는다.

    그렇다고는 해도, 이하의 방법으로 해결했다.

    콘솔(명령 프롬프트)의 문자 출력에 사용되는 문자 코드를 변경합니다.
    콘솔에서 다음 코드를 입력했습니다. (숫자 65001은 UTF-8에 대응하고 있다)
    chcp 65001
    

    좋은 웹페이지 즐겨찾기