同じネットワーク上にある 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 にバルクインサートしました。