본문 바로가기
DB

[MySQL][GCP] SQL 이모지 데이터 입력시 오류, charset utf8mb4로 변경

by 오늘의개발부 2020. 9. 4.
반응형

utf8mb4

상황 : 

1. Google Cloud Platform의 SQL을 사용하여 서비스중

2. 이모지 데이터 입력시 "Error: Incorrect string value: '\xF0\x9F\x8C\xBC \xEC...' for column ..." 오류발생

3. Table과 Column들은 이미 다 생성된 상태

 

 

1. GCP SQL 변경

[GCP console] - [SQL] - 변경할 DB서버 선택 후, 우측 [메뉴] 클릭, [수정] 클릭 - 구성옵션 플래그

플래그를 열어서 데이터베이스 플래그 character_set_server를 추가합니다.

값은 utf8mb4로 선택합니다.

저장.

 

 

2. Database Character 변경

// 변경
SET NAMES utf8mb4; 
ALTER DATABASE databaseName CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

// 확인
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

 

 

3. Database Table Character 변경

// 변경
ALTER TABLE databaseName.tableName DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci;

 

 

4. Database Table Column Character 변경

// 변경
ALTER TABLE databaseName.tableName MODIFY columnName text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

 

Column 변경시, 기존 컬럼의 정보를 정확하게 다시 입력해주고 SET 이후 부분을 수정해야한다.

기존 컬럼 정보라고하면 Not Null 이나 Auto Increment 등....

일괄적으로 변경하는 방법을 찾지못했다. 

ToDo List가 무척 많아서 급하게 에러나는 곳만 수정했다.

 

 

 

============================================================================

내 경우에는 Table까지 변경해도 Character 들이 자동으로 바뀌지 않았다. 

아래 스택오버플로우 게시글을 보면 테이블까지 변경 뒤에 문제가 해결되었나보다.

그래서 컬럼까지 업데이트하는 방안으로 해결한 것이다.

테스트해보니 [3. Database Table Character 변경] 과정 없이 필요한 컬럼에 대해서만 [4. Database Table Column Character 변경]을 진행해도 이모지 데이터를 입출력할 수 있었다.

 

 

 

 

참고:

stackoverflow.com/questions/20411440/incorrect-string-value-xf0-x9f-x8e-xb6-xf0-x9f-mysql

 

Incorrect string value: '\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

I am trying to store a tweet in my MYSQL table. The tweet is: quiero que me escuches, no te burles no te rias, anoche tuve un sueño que te fuiste de mi vida 🎶🎶 The final two

stackoverflow.com

stackoverflow.com/questions/23766959/set-google-cloud-sql-character-set-server

 

Set Google Cloud SQL character-set-server

I'd like to use Google Cloud SQL for my app, but I require that utf8mb4 be set as the server character set in order to correctly process 4 byte utf8 characters (emoji). It is not enough to simply...

stackoverflow.com

 

반응형