MSSQL에서 UTF-8 텍스트를 데이터를 넣을때 NVARCHAR타입으로 해서
INSERT INTO table ( text ) value ( N'한글테스트' ) 이런식으러 넣는 다
그런데 리눅스에서 PDO에서 uninxODBC SQL Server Native Client 11.0 넣으면 제대로 들어가지 않고 깨진다
그래서 아래 처럼 UTF-16LE로 변환해서 hexcode로 넣으니까 잘된다..
$sName = iconv('utf-8','UTF-16LE',$sName); $sName = bin2hex($sName); $sQuery = "INSERT INTO table (name) VALUES ( 0x{$sName} )";
그리고 값을 가져올때 가끔식 일부데이터는 문제가 또 발생한다 ㅠㅠ
그래서 CAST 로 한번 변환해주니까 잘된다..
참가로 NVARCHAR(MAX)로 하니까 글이 전혀 나오지 않아서 그냥 NTEXT로 꽁수를 부렸다..
$sQuery = "SELECT CAST(name AS NTEXT) AS name FROM table ";
그리고 참고로 PHP5.3.3 버전에서 PDO ODBC nvarchar(max)데이터 어느 정도 이상되면 깨지는 현상이 나오는듯하다.
그래서 PHP5.5.12 / PHP5.4.28 / PHP5.3.28에서는 CAST해서 하면 큰 문제가 없다.
아무튼 Linux uninxODBC SQL Server Native Client 11.0 이래저래 문제가 좀 있는듯하다.
그래서 개인적으로는 Linux에서 MSSQL 연결하는 경우 SQL Server Native Client 보다는 FreeTDS를 사용을 권하고 싶다.