Too Busy;DR 😁🙏🥹❤️🔥
- utf8에서 이모지를 저장하려 할 때 뱉는 오류이다.
- DB의 인코딩 방식을 utf8mb4로 지정해준다.
- + Connection에서도 utf8mb4로 지정해주는 것을 잊지 않는다.
환경
nodeJs / MySQL / promise-mysql(라이브러리) 요정도?
배경지식
1. UTF8은 1~4바이트의 가변 바이트를 가짐으로써 용량을 절약했다.
2. MySQL에서는 UTF8을 3바이트 가변 자료형으로 설계했다. (모든 언어가 21bit에 저장되기 때문)
3. 이모지는 4바이트를 갖는다.
=> mysql의 utf8 인코딩으로는 이모지를 저장할 수 없다..!
4. UTF8mb4는 UTF8과 비슷하지만 확장된 문자를 지원하기 위해서 4바이트까지 저장할 수 있는 Charset이다.
=> 🎉 mysql의 utf8mb4 인코딩으로 이모지를 저장할 수 있다..! 🎉
이슈
에디터에서 이모지를 입력할 때에 오류가 발생했다.
그래서 체크했다. 입력하는 테이블의 인코딩 방식이 utf8mb4로 되어있는지!
그런데, 놀랍게도, utf8mb4로 되어있는 것이 아니겠는가.. 😱
이슈는 이러했다. 아래 사진을 보면 charset이 utf8로 되어있다.
MySQL은 utf8mb4를 지원하지만 node와의 연결에는 utf8만 지원하는 상황이라고 할 수 있을 것이다.
답은 간단했다. charset을 utf8mb4로 변경해서 해결했다~!~!
필자처럼 굳이 node가 아니더라도 connection의 charset까지 확인하기를!
그리고 해결하기를!
참고
반응형
'경험' 카테고리의 다른 글
[검색 API 명세 정의 꿀팁] 매개변수 And, Or 조건 사용하기 (0) | 2024.03.24 |
---|---|
[React / Github Pages] BrowserRouter basename 오류 (0) | 2023.06.02 |
[JavaScript 정규식] 태그, 태그 안 내용까지 지우기 (0) | 2023.04.27 |
서버 이관 - 서버 이관 처음할 때 필요했던 것들 (0) | 2023.02.17 |
Express 라우팅 - 라우트 파라미터 정규식 (0) | 2022.12.19 |