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
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] [날짜] 1.날짜 연산 함수(DATEADD, DATEDIFF) (0) | 2024.02.28 |
---|---|
[MSSQL] 컬럼 문자열 합치기 (STRING_AGG(), STUFF()) (0) | 2024.02.27 |
[MSSQL] DB서버/컬럼 레벨 셋팅된 Collation 조회 및 Collation level (0) | 2024.02.21 |
[MS-SQL] CONVERT()함수의 스타일 번호별 날짜 변환 형식 (0) | 2024.01.23 |
[MS-SQL] 동적쿼리에서 OUTPUT Parameter 사용 예제 (0) | 2024.01.23 |