私はそれを解決する方法を見つけたので、これが誰かに役立つことを願っています.
まず、SQL_Latin1_General_CP1_CI_AS は CP-1252 と UTF-8 の奇妙な組み合わせです。基本的な文字は CP-1252 であるため、UTF-8 だけですべてが機能しました。アジアおよびその他の UTF-8 文字は 2 バイトでエンコードされ、php pdo_mssql ドライバーは可変長文字を嫌うように見えるため、(nvarchar の代わりに) varchar に CAST を実行し、2 バイト文字はすべて疑問符 (' ?').
バイナリにキャストして修正し、php でテキストを再構築しました:
SELECT CAST(MY_COLUMN AS VARBINARY(MAX)) FROM MY_TABLE;
プレ>PHP で:
//Binary to hexadecimal $hex = bin2hex($bin); //And then from hex to string $str = ""; for ($i=0;$i<strlen($hex) -1;$i+=2) { $str .= chr(hexdec($hex[$i].$hex[$i+1])); } //And then from UCS-2LE/SQL_Latin1_General_CP1_CI_AS (that's the column format in the DB) to UTF-8 $str = iconv('UCS-2LE', 'UTF-8', $str);
プレ>