윈도우 11 MySQL 8.0을 다운로드 후 사용 중
한글 문자가 포함된 데이터를 삽입 중 에러 발생.
> mysql -u root -p < server/seed.sql -D cmarket
Enter password: **
ERROR 1366 (HY000) at line 2:
Incorrect string value: '\xEB\x85\xB8\' for column 'name' at row 1
ERROR 1366 (HY000) at line 2:
Incorrect string value: '\xEB\x85\xB8\' for column 'name' at row 1
"한글" 때문이다.
구체적 설명에 앞서 먼저
참조 : https://sshkim.tistory.com/128
Charset(character-set) : 문자 집합
Collation : 정렬
UTF-8, utf8mb3, utf8mb4 ???
대부분 데이터는 텍스트 기반이니, bool, int 처럼 텍스트 저장할 수 있는 자료형이 필요함, 그것이 UTF-8의 탄생.
UTF-8 문자 집합은 1~4byte 까지 저장이 가능한데,
전세계 모든 언어가 21bit(3byte 보다 살짝 작음)에 저장되니까
UTF-8을 "3바이트 가변 자료형"으로 설계.
(즉 MySQL 에서는 utf8mb3 = UTF-8)
그런데 최근에 Emoji 문자열을 많이 쓰는데 이게 4byte다.
그래서 utf8mb4가 나온거다.
다시 돌아와서
MySQL 콘솔에서
show variables like "c%"
혹은
status
입력하면 현재의 문자셋을 확인할 수 있다.
(characterset들이 보인다. mb4로 나오는 건 내가 문제를 해결한 후에 캡쳐해서 그런거고,
저 에러가 발생했다면 latin1, euroke 이런식으로 써 있었을 거다).

결국 우린 저 4개의 characterset을 utf8mb4 혹은 3으로 바꿔놔야 한다.
4-1. c/ProgramData/MYSQL/MYSQL Server 8.0으로 이동
(ProgramData가 숨김이라 안 보일 거다. 스샷처럼 보기 눌러서 숨김 표시하면 뾰로롱)


4-2. my.ini 수정한다.
수정 전에 수정할 권리를 줘야 한다.
속성 - 보안에서 Users(현재 나) 누르고 편집하고
사용 권한 다 줘라, 그래야 수정 가능하다.

4-3. 쭉 내려서 맨 밑에 내용을 추가 후 저장한다.
[client]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
init_connect="SET collation_connection = utf8mb4_general_ci"
init_connect="SET NAMES utf8mb4"
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[mysql]
default-character-set = utf8mb4
[mysqldump]
default-character-set = utf8mb4

4-4. 검색창에 시스템 쳐서 mysql 찾고 다시 시작한다.
그리고 cmd를 실행한다.

4-5. cmd로 mysql 접속 후 다시
show variables like "c%"
혹은
status
입력하면

모든 characterset이 utf8mb4로 바뀌었다.
다시 한글이 포함된 데이터를 삽입하면 오류가 안난다.
그런데...

삽입은 됬는데 조회해보니 여전히 한글이 깨진다.
분명 utf8mb4는 한글 안 깨진다며....
여기서 어제 4시간 가까이 찾다가 검색도 안나와 접으려고 했으나,
오늘 포스팅 하다가 답을 찾았다.
참고 : https://togll.tistory.com/58
그렇다고 내 cmd가 아예 한글을 못 쓰는게 아니다.
명령어 잘못 쓰면 한글로 나와서 잘 되는줄 알았는데,
cmd 들어가서 위 탭 우클릭 속성 들어오면

현재 코드 페이지가 949라서 안된단다. (여기서 더 파긴 싫다. 그려려니 하자)
chcp 65001
입력하면

뭔진 모르겠는데 65001로 바뀌었다.
진짜 찐막으로 안 깨지는지 확인해보자.

아 쉽ㅍ

6시간 이상 안된거, 포스팅하면서 해결 완료. 너무 기뻐서 모니터 뜯어 먹고 싶다.
(사실 이 포스팅은 오류 해결이 아니라 미결로 남기려고 했다.오류도 고뇌하면서 공부가 되더라. 더 이상은 모르겠다 이렇게 끝내려고 했다.
검색 좀 하면서 utf-8이 뭔지 정리나 하려고 검색하다가....)
정말 만에 하나 이래도 cmd에서 안된다?
cmd가 아니라 8.0 Commend Line client에서 해봐라.
된다.

왜 난 이렇게 간단한 이치를 몰랐을까.
분명 utf8mb4인데, 한글이 깨진다...
그럼 cmd가 문제다.
진실은 언제나 하나.
