본문 바로가기
TIL

이모지 문자 mySql에 저장하기

by 해룸 2024. 4. 12.

크롤링 해 온 데이터를 db에 저장하는 과정 중 오류가 발생했다.

"Incorrect string value: '\\xF0\\x9F\\x92\\xAC\\xF0\\x9F...' for column 'reviews' at row 1"

 

sql 에러메시지를 살펴보니 다른 리뷰들과 다른 부분이 눈에 띄었다. 

바로 😎👽🐸 이런 이모지들...!! 

 

이모지 같은 문자들은 글자당 최대 4바이트의 사이즈가 필요한데 Mysql의 utf8 문자셋의 경우 글자당 최대 3바이트까지만 지원한다. 그래서 이런 문제가 발생하는 것이다.

 

해결방법

1. 이모지 제거하는 정규식 사용

  var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]              |[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c              [\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]              |\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f              |\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]              |\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04              |[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a              |\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934              |\u2935|[\u2190-\u21ff])/g;  return string.replace(regex, '');

이렇게 하면 이모지를 공백으로 대체할 수 있다.

 

2. 문자셋을 utf8mb4 로 변경

//app.module.ts
const typeOrmModuleOptions = {
  useFactory: async (
    configService: ConfigService,
  ): Promise<TypeOrmModuleOptions> => ({
    namingStrategy: new SnakeNamingStrategy(),
    type: 'mysql',
    username: configService.get('DB_USERNAME'),
    password: configService.get('DB_PASSWORD'),
    host: configService.get('DB_HOST'),
    port: configService.get('DB_PORT'),
    database: configService.get('DB_NAME'),
    autoLoadEntities: true,
    synchronize: configService.get('DB_SYNC'),
    logging: true,
    charset: 'utf8mb4',
  }),
  inject: [ConfigService],
};

charset: 'utf8mb4' 부분을 추가해준다.

ALTER DATABASE 데이터베이스명 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

그리고 이미 만들어진 db라면, new query창에 이 코드를 입력해 db 또는 table의 문자셋을 변경해주면 된다!

 

 

저장이 잘 된다. 빠밤~~

'TIL' 카테고리의 다른 글

GCP Compute Engine 이용해 서버 배포하기  (0) 2024.04.16
힙 정렬  (0) 2024.04.12
TIL #34) Nest로 S3 이용하기  (0) 2024.03.25
TIL #33) 순서 정렬하기  (0) 2024.03.22
TIL #32) Linked List 자료구조  (0) 2024.03.20