이 영역을 누르면 첫 페이지로 이동
일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

페이지 맨 위로 올라가기

[Oracle] DB 이모지 저장하기 - NVARCHAR2

일반인의 웹 개발일기

[Oracle] DB 이모지 저장하기 - NVARCHAR2

  • 2023.11.03 11:29
  • Database/Oracle
반응형

오라클(Oracle) 데이터베이스를 사용하는데

이모지(이모티콘)가 저장이 안 된다... 😥

 

그래서 오라클 DB에서 이모지 저장하는 방법을 공유하려고 한다.

오라클 버전, 통신 방법 등 환경에 따라 상이할 수 있다.

 

환경 정보

JavaScript

Java JDK 1.8

Oracle Database 19c


1. 오라클 데이터 타입 설정 (NVARCHAR2)

이모지(🖐)는 일반적으로 Unicode 문자를 지원하는 데이터 형식을 사용해야 한다.

내가 사용 중인 오라클 버전의 경우 데이터 타입 NVARCHAR를 사용해야 정상적으로 이모지가 저장 된다.

(VARCHAR2는 하나의 문자에 3byte를 저장하는데 이모지는 4byte로 표현된다.)

 

이미 테이블 생성을 했다면 컬럼의 데이터 타입을 변경해 주자.

ALTER TABLE TABLE_TEST MODIFY IMOJI_TEST NVARCHAR2(20);

 

MySQL에서는 캐릭터 셋을 utf8mb4로 지정해 주면 잘 저장되는 것 같다.

CREATE TABLE `imoji_test` (
`imoji_test` varchar(15) CHARACTER SET utf8mb4
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='이모지 테스트';

 

2. 문자열 Byte 변환

2번, 3번 작업은 상황에 따라 하지 않아도 될 수도 있지만

내 경우 서버에 데이터를 전송할 때 이모지가 깨지는 현상이 있어 추가작업이 필요했다.

 

프론트에서 문자열(이모지 포함)을 입력받아 서버에 전달하기 전에 Byte 형식으로 변환한다.

String을 Byte로 UTF-8 형식으로 변환하는 메소드를 하나 만들어서 사용했다.

function stringToUtf8Bytes (text) {
var encoder = new TextEncoder();
var binary = encoder.encode(text);
return JSON.stringify(Array.from(binary));
}
stringToUtf8Bytes('이모지 변환 테스트 😀😁');
[출력]
'[236,157,180,235,170,168,236,167,128,32,235,179,128,237,153,152,32,237,133,140,236,138,164,237,138,184,32,240,159,152,128,240,159,152,129]'

 

이렇게 변환된 데이터를 서버로 전송한다.

 

3. Byte 문자열 변환

프론트에서 Byte로 변환한 데이터를 서버에서는 다시 String 문자열로 변환해 준다.

public static String byteToString(String text) {
String str = "";
try {
ObjectMapper mapper = new ObjectMapper();
byte[] serializedBytes = text.getBytes("UTF-8");
byte[] byteArray = mapper.readValue(serializedBytes, byte[].class);
Charset charset = StandardCharsets.UTF_8;
str = charset.decode(ByteBuffer.wrap(byteArray)).toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
byteToString(paramMap.get("IMOJI_TEST"));

 

다시 문자열로 변환한 데이터를 DB에 저장한다.

 

4. DB 데이터 확인

위 내용대로 잘 진행했다면 이모지 저장이 잘 되는 것을 확인할 수 있다.

Oracle DB 이모지 저장
Oracle 이모지

위에서도 언급했듯이 각자의 개발 환경에 따라 이모지 저장이 문제없이 저장이 될 수도 되지 않을 수도 있다.

  • 데이터베이스 버전
  • 데이터 타입
  • CHARACTER SET
  • 서버 통신 방법

 

이외에도 여러 이유가 있을 수 있고 잘 확인해서 대응하면 될 것 같다.

반응형

댓글

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

다른 글 더 둘러보기

정보

일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

  • 일반인의 웹 개발일기의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (47)
    • 사이드 프로젝트 (3)
      • 크롤링 (2)
    • 개발 이야기 (18)
      • MSA (7)
      • Spring Boot (3)
      • JPA (0)
      • Docker (1)
      • Javascript (2)
      • AWS (Amazon Web Services) (5)
      • Jenkins (0)
    • Database (4)
      • PostgreSQL (2)
      • MySQL (1)
      • Oracle (1)
    • 에러 정리 (4)
      • Docker (1)
      • JPA (1)
      • Python (1)
      • PostgreSQL (1)
    • 운영체제 (3)
      • Linux (3)
    • 게임 (8)
      • 마인크래프트(Minecraft) (2)
      • 팰월드(PalWorld) (6)
    • 워킹홀리데이 (6)
      • 일본 워킹 홀리데이 (6)

인기 글

정보

흔하디흔한개발자의 일반인의 웹 개발일기

일반인의 웹 개발일기

흔하디흔한개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 흔하디흔한개발자. Designed by Fraccino.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.