>

개요
내 코드가 py.exe (파일 클릭)를 통해 실행될 때 MySql에서 16 진수의 Bytearray 표현을 읽은 다음 16 진수 값으로 디코딩하려고 시도합니다. 그러나 커넥터 모듈 자체는 UTF-8 '잘못된 시작 바이트'로 디코딩하지 못합니다. 그럼에도 불구하고 PyCharm을 통해 실행되는 동일한 코드가 완벽하게 작동합니다. 테이블에 다른 데이터가 있지만이 데이터 유형의 열을 포함하는 대신 다른 열만 선택하면 제대로 작동하므로 실패하지는 않습니다.

세부 사항 및 시도한 내용
MySql 서버가 공급자와 호스팅되고 있으며 phpMyAdmin을 통해 관리하고 있습니다. 문제가있는 열은 " binary(16) "입니다. ". sys.stdin.encoding 인쇄와 같이 코드를 정상적으로 실행하거나 PyCharm (후자가 성공한 것 제외)을 통해 코드를 실행하는 것 사이에 불일치를 찾으려고 시도했습니다.  그리고 그것이 같은 위치에서 실행되고 있는지 확인하면 둘 다 동일하게 나타납니다. 또한 서버에서 인코딩을 개선하고 모든 테이블과 열을 utf8_general_ci 로 설정하려고했습니다. 그러나 이것은 아무것도 변하지 않는 것 같습니다. 연결 호출 " use_unicode=True, charset=(UTF8/ASCII) 에 매개 변수를 추가하려고했습니다. "하지만 여전히 코드는 동일하게 실행되었습니다.

보다 명확한 코드 요약
My Code는 MySql 서버에 연결하고 커서 객체를 생성하며 사용할 데이터베이스를 설정하고 적절한 테이블에서 모든 것을 선택합니다. py.exe 및 PyCharm에서 잘 작동하며 databasecursor.fetchall() 를 사용하여 데이터를 디코딩/읽으려고 할 때만 (py.exe에서) 실패합니다. . 이 시점에서 실패하지 않으면 커서를 가져 오는 동안 생성 된 사전을 살펴보고 첫 번째 행 (bytearray 포함)을 16 진수 값으로 디코딩하고 사전의 디코딩되지 않은 버전을 덮어 씁니다.

출력
코드가 PyCharm에서 성공적으로 실행되면 테이블의 다른 모든 데이터 중에서 bytearray(b'\x1f\x92\xb5\xe2wZ@I\x86B\x12\x88K\x06 w') 가 출력됩니다. 그런 다음 1f92b5e2775a4049864212884b062077 로 변환됩니다.  이것은 정확히 예상대로입니다. (이 출력은 모든 행에 대해 발생하지만 물론 다른 값으로 발생합니다.)

py.exe로 실행할 때 정확한 오류 :

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\Nathaniel\AppData\Local\Programs\Python\Python37\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\Users\Nathaniel\AppData\Local\Programs\Python\Python37\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Nathaniel\Projects\gui.py", line 295, in initialize
    players = databasecursor.fetchall()
  File "C:\Users\Nathaniel\Projects\mysql\connector\cursor_cext.py", line 490, in fetchall
    rows = self._cnx.get_rows()
  File "C:\Users\Nathaniel\Projects\mysql\connector\connection_cext.py", line 277, in get_rows
    row = self._cmysql.fetch_row()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 1: invalid start byte  

  • 답변 # 1

    raw 설정   True 에 연결시 매개 변수  모든 데이터를 파이썬 변수 유형 자체로 변환하지 않고 바이트/바이트 배열로 반환합니다. 이런 방식으로 데이터를 건너 뛰고 수동으로 데이터를 Python 변수 유형으로 변환하면 문제가 해결되고 완벽하게 작동하기 때문에 해당 프로세스의 어딘가에서 문제가 발생해야합니다.

  • 이전 python - Zap B에서 POST 기능을 전달하여 Zap A 트리거
  • 다음 vue.js - 뷰가 상점을 직접 변경하지 않도록 상태에서 오브젝트를 안전하게 복사하는 방법