회사_ C#, MSSQL, WPF

MSSQL 중국어 깨짐 현상, ?표 현상 해결방법

lsme 2024. 9. 30. 09:00

 

 

[문제]

mssql에서 중국에 저장할려고 하는데, 

愛你愛你愛你라는 글자가  愛?愛?愛? 이런식으로 저장이 된다. 

 

 

 

[해결 방법] 

愛你愛你愛你 와 같은 문자열을 삽입하려면 따옴표를 적절하게 이스케이프해야 합니다.

1. 문자열 앞에 N을 붙여서 Unicode 문자를 사용

2. 문자열 내의 단일 인용부호는 두 개의 단일 인용부호로 변경

나는 1번 2번 둘다 해서 해결했다. 

 

 


 

 

 

[예시]

1.  문자열 앞에 N을 붙여서 Unicode 문자를 사용

string.Format("insert into 테이블명(id, one) values('{0}', 'N{1}'))", ID, ONE);

 

INSERT INTO YourTable (YourColumn)
VALUES (N' 愛你愛你愛你 ')  이런식으로 되겠다. 

 

 

2. 문자열 내의 단일 인용부호는 두 개의 단일 인용부호로 변경

sQuery = string.Format("insert into 테이블명(id, one) values('{0}', 'N{1}'))", ID, ONE.Replace("'", "''"));

해당 변수뒤에 .Replace("'", "''") 을 붙여주면 되는데... 

 

Replace(" ' ", " ' ' ") 이런 것이다. 

' 하나를 '' 2개로 해주면 해결된다?!

 

 

 

단일 인용 부호(')를 두 개의 단일 인용 부호('')로 바꾸는 이유는 SQL 인젝션 공격을 방지하고 문자열을 올바르게 처리하기 위함.

즉,  

 

  • SQL 인젝션 공격 방지: 사용자 입력을 안전하게 처리하여 악의적인 코드 실행을 방지합니다.
  • 문자열 이스케이프 처리: SQL 쿼리에서 문자열을 올바르게 처리하여 구문 오류를 방지합니다.