ubuntu から sqlserver に接続すると文字化けする

同じネットワーク上にある sqlserver に ubuntu から odbc 接続すると、日本語が文字化けすることがあります。

特に半角カタカナは文字化けがひどく、そのまま mysql に書き込もうとするとエラーになります。

例えば以下のようなクエリ、


SELECT KanaName FROM KensaFIL WHERE Hizuke =? ;

kanaName が半角カタカナだと「?」を含んだ文字化けが起こります。

以下のようにすれば文字化けが直ります。


SELECT CONVERT(nvarchar,KanaName) as kn FROM KensaFIL WHERE Hizuke =? ;

php のプログラムとしては以下のような感じ。


	$pdo = new PDO('odbc:Driver={ODBC Driver 17 for SQL Server};Server=192.168.1.197;Database=Lapis3',username,password);
	$stmt=$pdo->prepare("SELECT Hizuke, UketukeNo, KanjaID, CONVERT(nvarchar,Name) as nn, CONVERT(nvarchar,KanaName) as kn, Sex, Birthday, Age, DrName FROM KensaFIL WHERE Hizuke = ? ;");	
	$stmt->execute(array($someday)) ;
	while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
		if( $row['Hizuke']!=null ) 
		{		
			$Hizuke = $row['Hizuke'];
			$UketukeNo = $row['UketukeNo'];
			$karteNo = $row['KanjaID'];
			$ptName = $row['nn'];		
			$KanaName = $row['kn'];
			$sex = $row['Sex'];
			$birthDate = $row['Birthday'];
			$age = $row['Age'];		
			$DrName = $row['DrName'];	
			$AllKensaArr[] = array($Hizuke, $UketukeNo, $karteNo, $ptName, $KanaName, $sex, $birthDate, $age, $DrName);
		}
	}

そうして、$AllKensaArr を mysql にバルクインサートしました。