'charmap' codec can't encode characters in position 0-2:

boingboing·2021년 12월 30일
0

현상


sql_query = "SELECT name, barcode FROM MY_Client WHERE name = AES_ENCRYPT(%s, %s)"

cursor.execute(sql_query, ["김이름", SECRET_KEY])

파이썬에서 커서를 통해 SQL 직접 접근 쿼리문 실행 시 발생.

STEP 1

AES_ENCRYPT로 비교를 하려는데, 현재 암호화된 이름 컬럼으로 비교하기 위해 매개변수에 AES_ENCRYPT를 수행함. 그러자 발생..

cursor.execute(sql_query, ["김이름", SECRET_KEY])

SOLVE

"김이름".encode('utf-8')로 바꿔서 string이 아닌 utf-8로 바꿈..

-> Cannot convert string '.\x1B`lDA...' from binary to utf8mb4
새로운 에러 발생 -ㅁ-;;;

STEP 2

-> 쿼리문을 다시 봄

sql_query = "SELECT name, barcode FROM MY_Client WHERE name = AES_ENCRYPT(%s, %s)"

암호화된 결과를 추출할 때는 hex()함수로 AES_ENCRYPT된 결과를 변환해주어야 함.

SQL 쿼리를 바꾼 후..

STEP 3

cursor.execute(sql_query, ["김이름".encode('utf-8'), SECRET_KEY])

로 input값을 utf8 방식으로 인코딩한 후 쿼리문에 넣어주니 에러가 해결됨 ㅠㅠ

근데 사실 해결은 됬는데 왜 된건지 잘 모르겠다. AES ENCRYPT를 수행하기 위해 utf8방식으로 반드시 인코딩이 전제되어야 하는건지..

0개의 댓글