Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ddodoi 님의 블로그

8주차-파트05: MySQL error: error code 1366, LAST_INSERT_ID(), MAX(), insertId 본문

웹풀스택 일일정리

8주차-파트05: MySQL error: error code 1366, LAST_INSERT_ID(), MAX(), insertId

ddodoi 2024. 10. 14. 15:44

CHAPTER 1. MySQL error: error code 1366 incorrect integer value '' for column at row 1

orders테이블에 한글이 포함된 행을 추가하려는데 자꾸 다음과 같은 에러가 뜨면서 데이터가 안 들어갔다. 혹시나 data type을 잘못 검토했나 다 찾아도 아무런 이상이 없어서 검색해보니  MySQL에서 UTF-8 인코딩된 문자열을 처리하는 과정에서 발생하는 문제로, 주로 문자셋 설정이 맞지 않을 때 나타난 것이었다. 이 문제는 한글과 같은 유니코드 문자를 utf8mb4로 처리하지 못할 때 발생하는 것이었다.

 

문제 해결을 위해 cmd창에 접속해서 mysql로 접속해줬다.

docker exec -it mariadb /bin/bash
mariadb -u root -p
root

 

🌱해결 방법

1. 데이터베이스와 테이블의 문자셋 확인 및 수정

  • 데이터베이스와 테이블이 utf8mb4 문자셋을 사용하는지 확인하고 그렇지 않다면 아래 명령어로 수정
-- 데이터베이스 문자셋 변경
ALTER DATABASE 스키마명(데이터베이스명) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

-- 테이블 문자셋 변경
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

아니면 

2. 특정 컬럼의 문자셋 변경

  • 특정 컬럼의 문자셋이 제대로 설정되었는지 확인하고 필요하면 아래처럼 수정
ALTER TABLE 테이블명 MODIFY 특정컬럼명 자료형 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

 

 

 

 

CHAPTER 2. LAST_INSERT_ID(), MAX()

<방금 insert한 테이터 pk 가져오는 방법>

✔️LAST_INSERT_ID()

LAST_INSERT_ID()는 MySQL에서 가장 최근에 자동 증가(AUTO_INCREMENT) 된 값을 반환하는 함수로 데이터베이스 연결(Session) 내에서 마지막으로 삽입된 레코드의 AUTO_INCREMENT 값을 추적할 때 사용된

 

시간차공격 >> 이전값을 들고오는 간간히 오류가 남!

 

✔️MAX()

MAX() 함수는 MySQL 및 여러 데이터베이스 관리 시스템에서 사용되는 집계 함수 중 하나로  지정된 컬럼의 최대값을 반환하는 데 사용된다.

 

 

 

 

CHAPTER 3. insertId

 

 

 

insertId는 MySQL에서 새로 생성된 행(row)에 대해 자동 증가되는 기본 키(primary key) 값을 반환할 때 사용된다. 즉, 데이터베이스에 새로운 레코드를 추가(insert)했을 때, 해당 레코드의 AUTO_INCREMENT 컬럼의 값을 나타낸다.

 

 

설명:

  • insertId: 3 이라는 값은, 방금 추가된 행의 id 값이 3이라는 의미이다.
  • 이 값은 주로 id 컬럼이 자동 증가(AUTO_INCREMENT)로 설정된 경우 반환된다.
  • 예를 들어, orders 테이블에 새 주문이 추가되면 해당 주문의 고유 식별자인 id가 자동으로 증가하며, 그 값이 응답으로 제공된다.