DB/MSSQL

[MSSQL] 이모지(Emoji) 저장 및 비교 조회하기

alien22c 2024. 2. 23. 11:13
728x90
728x90

이모지(Emoji)는 그림 형태의 문자로, 
MSSQL에서 데이터 저장 시 유니코드를 지원하는 NVARCHAR 데이터타입을 사용하면 그대로 저장/조회가 가능하다.

다만 적재된 데이터와 이모지를 비교검색할 때 이슈가 발생할 수 있다.
그리고 유니크 인덱스 생성 등 중복체크 시 중복 이슈가 발생할 수 있다.

해결안)
기존 서비스 운영 환경에 영향이 없으면서 특정 비즈니스를 처리하기 위해서 
NVARCHAR 데이터타입으로 저장이슈는 없으나 
조회/중복체크 등으로 인한 이슈 발생 시 컬럼레벨 별도의 Collation을 설정하는 것으로 대응이 가능하다.
 
참고)

-- 이모지 테스트 샘플

CREATE TABLE dbo.emojiTest (
    id INT IDENTITY,
    col1 NVARCHAR(256), -- COLLATE Korean_100_CI_AS_SC ,
CONSTRAINT PK_emojiTest_id PRIMARY KEY CLUSTERED (id)
)
;
 
-- CREATE UNIQUE INDEX UX_emojiTest_col1 ON dbo.emojiTest (col1);
 
INSERT INTO dbo.emojiTest VALUES (N'Hello 😉' );
INSERT INTO dbo.emojiTest VALUES (N'😉😉😉' );
INSERT INTO dbo.emojiTest VALUES (N'😉' );
INSERT INTO dbo.emojiTest VALUES (N'😉Hello' );
INSERT INTO dbo.emojiTest VALUES (N'😉😉😉Hello');
 
 
-- 유니크 인덱스 생성 시 중복에러발생!!
CREATE UNIQUE INDEX UX_emojiTest_col1 ON dbo.emojiTest (col1);
 
-- euqal 조회 시 기대한 결과값 조회 안됨!!
SELECT *
FROM dbo.emojiTest WITH(NOLOCK)
WHERE col1 = N'😉😉😉Hello';
-- GroupBy 시 기대한 결과값 조회 안됨!!
SELECT col1, count(*) cnt
FROM dbo.emojiTest WITH(NOLOCK)
GROUP BY col1;
728x90
728x90