お世話になります。
Excel(VBA)からDB(MySQL)へSQL「select test('𠮷');」を実行すると、 ODBCへ渡るSQLが「select test('');;」と”𠮷”の部分が化けます。
("💛"のように化けない文字もあります。)
★原因と対策をご教示願います。
※SQL内の"test"とはDB(MySQL)のFUNCTION名です。
<OODBCへの渡ったSQLの取得方法 >
ODBCのデバック設定を有効にして、ログを取得しました。
<Excel(VBA)内容>
Sub DoSql()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("SQL\_local")
Dim con As Object
Set con = CreateObject("ADODB.Connection")
con.Open "locald8.2"
con.CursorLocation = 3
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
Dim SQL As String
'セル「ws.Cells(2, 2)」にSQL「select test('𠮷');」を設定してます。
SQL = ws.Cells(2, 2)
ws.Cells(5, 2).Clear
Dim aryByte() As Byte
aryByte = SQL
rs.Open SQL, con
ws.Cells(5, 2).CopyFromRecordset rs
rs.Close
Set rs = Nothing
Set con = Nothing
Call MsgBox("処理終了")
End Sub
<こちらでの調査内容>
・変数「SQL」には想定通りの値が格納されていることを、バイト配列変数「aryByte」で確認済み。
"𠮷"に相当するバイト配列値が"66 216 183 223"と、"𠮷"に該当するUTF-16LE(10進数)になります。
(UTF-16BEだと0xD842、0xDFB7)
・OODBCへの渡ったSQLの"𠮷"に相当するUTF-16BEが"0xD802、0xDFB7"と、"42"が"02"に変わっている。
★ここの原因と対策が知りたいです。
<実行環境>
・Excel:365 MSO (バージョン 2302 ビルド 16.0.16130.20298) 64 ビット
・ODBCドライバ:MySQL ODBC 8.2 Unicode Driver