회사_ 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 쿼리에서 문자열을 올바르게 처리하여 구문 오류를 방지합니다.