pymysql Error : (1366, "Incorrect string value: '\\xED\\x83\\x84\\xED\\x83\\x84...' for column 'lunch_1_menu' at row 1") 해결 방법

2024. 9. 12. 09:13·프로그래밍/Error
목차
  1. 에러 분석
  2. 에러 해결
반응형

 

안녕하세요 펭귄 교수입니다.

 

이번에 Docker로 회사 구내식당 메뉴 페이지를 만들다가 만난 에러에 관해 분석하고, 해결 방법에 관해 글 써보겠습니다.

 


에러 분석

pymysql.err.DataError: 
(1366, "Incorrect string value: '\\xED\\x83\\x84\\xED\\x83\\x84...' for column 
'lunch_1_menu' at row 1")

 

Front (nginx) 에서 Back (Flask) 으로 메뉴를 등록하기 위해 HTTP POST 방식으로 데이터를 전송,

Back (Flask)는 DB(mysql)에 INSERT 하는 과정에서 해당 에러가 발생하였습니다.

 

Back에서 로그를 찍었을 때는 정상적으로 한글이 입력되지만, DB로 INSERT 할 때는 한글이 유니코드로 작성돼 해당 에러가 발생하는 것으로 보입니다.

 

INSERT INTO menu
( date, lunch_1_menu, lunch_1_kcal, lunch_2_menu, lunch_2_kcal, 
lunch_sub_menu, lunch_sub_kcal, dinner_menu, dinner_kcal )
VALUE ( '2024-09-02', '탄탄멘,추가밥,모듬춘권*칠리S,짜사이채무침,타트체리주스,배추김치', 123, 
'쇠고기미역국, 잡곡밥, 매콤제육김치볶음, 콩나물무침, 브로컬리*초장, 깍두기', 123, 
'청포조젤리,매실주스', 123, 
'보글보글*떡만두국,잡곡밥,충무식오징어무침연근땅콩조림,고들빼기무침,석박지', 123 )

 

위에 값은 Flask에서 query를 print한 결과 값입니다.

 

만약 Docker에서 Flask에서 Debug하는 Print 값이 출력되지 않는다면, print()에 flush=True 라는 옵션을 주고, logs를 찍어보면 확인 가능합니다.

 

파이썬 코드

print('로그', flush=True)

 

Bash 로그 확인

docker logs flask_server

 

 

그래서 해당 문제는 mysql 자체 문제로 보았고, 찾아보니 mysql의 utf8 문자셋은 UTF-8 인코딩을 부분적으로만 구현하여

4바이트 인코딩 방식인 한글에서 저렇게 유니코드로 깨져 보이는 것입니다.

 


에러 해결

이를 해결할 방법은 다음과 같습니다

 

1. mysql Docker에 접속

docker exec -it mysql /bin/bash

 

2. mysql utf8mb4 인코딩 적용

# mysql Docker Container 내부
mysql -u user -p
# 패스워드 입력 후 mysql 접속

 

# DB 접속
use [DB_NAME];

# DB 인코딩 변경
ALTER DATABASE [DB_NAME] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

# DB 내 Table 인코딩 변경
ALTER TABLE [TABLE_NAME] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

utf8mb4 인코딩은 MySQL 5.5.3 버전부터 지원하는 인코딩 방식입니다.

 

해당 정보에 대해서는 아래 공식 문서를 통해 더 알아보실 수 있습니다.

 

 

MySQL :: MySQL 8.4 Reference Manual :: 12.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)

12.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding) The utf8mb4 character set has these characteristics: Supports BMP and supplementary characters. Requires a maximum of four bytes per multibyte character. utf8mb4 contrasts with the utf8mb3 c

dev.mysql.com

반응형

'프로그래밍 > Error' 카테고리의 다른 글

[티스토리 스킨 버그] 카테고리의 다른 글 두 개 표시, 해결 방법  (1) 2024.09.27
React Warning 해결 : Selector unknown returned a different result when called with the same parameters. This can lead to unnecessary rerenders.  (0) 2024.09.22
[티스토리 스킨 버그] 흰색 프로필 박스 해결 방법  (1) 2023.11.23
[파이썬 venv] Visual Studio Code에서 venv 활성화가 되지 않을 때  (0) 2023.05.30
파이썬 가상 환경 venv 활성화가 안돼요 (해결 방법)  (1) 2022.10.02
  1. 에러 분석
  2. 에러 해결
'프로그래밍/Error' 카테고리의 다른 글
  • [티스토리 스킨 버그] 카테고리의 다른 글 두 개 표시, 해결 방법
  • React Warning 해결 : Selector unknown returned a different result when called with the same parameters. This can lead to unnecessary rerenders.
  • [티스토리 스킨 버그] 흰색 프로필 박스 해결 방법
  • [파이썬 venv] Visual Studio Code에서 venv 활성화가 되지 않을 때
Dev.Poinguinie
Dev.Poinguinie
게임, 코딩 블로그 입니다. 여러 일상적인 글도 올려요! 많이 봐주세요! 감사합니다.
  • Dev.Poinguinie
    펭귄교수
    Dev.Poinguinie
  • 공지사항

    • 티스토리 스킨 변경
    • 파이썬 코딩 강의 공지사항
    • 분류 전체보기
      • 새티스팩토리
        • 정보
        • 모드
        • 리뷰
      • 펠월드
        • 정보
        • 패치노트
      • 게임
        • 스팀 세일
        • 테라리아
        • 디펜서바이버
      • App
        • Kotlin
        • Flutter
      • Front End
        • HTML
        • JavaScript
        • React
      • Back End
        • Node.js
      • Docker
        • Docker 강의
        • Docker Project
      • 프로그래밍
        • AI
        • Chrome Extension
        • Markdown
        • Python
        • C++
        • Linux
        • Error
        • Tool
      • Computer Science
        • Algorithm
        • Network
      • 게임 프로그래밍
        • 유니티
      • 제작
        • 웹사이트
        • 기타 프로그램
      • 일상
        • 자작시
        • 노래 추천 및 정보
        • 블로그 운영
        • 내일의 모든 것
        • 오블완 챌린지
      • 리뷰
        • 식당 리뷰
        • IT 리뷰
  • 링크

    • 새티스 팩토리 모드
    • 깃허브 블로그
    • 깃허브 프로필
  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
Dev.Poinguinie
pymysql Error : (1366, "Incorrect string value: '\\xED\\x83\\x84\\xED\\x83\\x84...' for column 'lunch_1_menu' at row 1") 해결 방법

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.