자답 올립니당
SHOW CREATE TABLE table_name; 쿼리로 테이블을 보니
ENGINE=MyISAM DEFAULT CHARSET=utf8
와 같이 캐릭터셋이 utf8 이였네요, 아래의 쿼리로 테이블 캐릭터셋 변경 후 에러가 잡혔습니다.
ALTER TABLE
table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
원인은 저장하려는 데이터(이모지콘)는 4바이트 인데 mysql utf8 은 3바이트 가변 자료형이라 발생한 문제로 파악되었다. utf8mb4는 4바이트
라라벨에서 Mysql 인서트시에 아래와 같은 오류가 발생합니다.
혹시 도움이 될만한 정보가 있을까요?
# 문제상황
트위터에서 크롤링한 데이터를 인서트하는 과정에서 아래와 같은 에러메세지가 출력됩니다.
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE2\x80...' for column..
문제가 발생하는 문자는 브라우저 화면에서 “All 로 출력되고 라라벨 에러메세지에서는 �... 로 출력됨.
## mysql 로그
2018-11-21T09:34:01.347057Z 4 Execute insert into `tablename` (`field1`, `field2`, `field3`) values ('value1', 'value2', 'video themed \�...',
2018-11-21T09:34:01.347680Z 4 Close stmt
2018-11-21T09:34:01.347844Z 4 Query ROLLBACK
2018-11-21T09:34:01.364405Z 4 Quit
## 환경정보1
Mysql 버젼은 5.7이고 VARIABLES을 출력해보면 첨부한 이미지의 결과와 같습니다.
(사용한 쿼리: SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';) )
# 환경정보2
my.cnf 파일에 설정된 내용은 다음과 같습니다.
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
open-files-limit=2048
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 환경정보3
라라벨 config/database.php 파일에서 mysql 설정 상태는 아래와 같습니다.