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