プロが教える店舗&オフィスのセキュリティ対策術

DBバージョン:MySQL5 ODBCバージョン:ODBC3.51 言語:VB2003
を利用し VBからSQLを発行した際、1バイト文字の場合は問題はなく SQL文内に日本語を含むとハンドルされていない旨のシステムエラーが出てしまいます

SQLAdminからStatusコマンドDBのキャラクタセット情報を確認してもSJISとして設定されており
またコンソールから直接SQL文を打ち込んでも正常に動作いたします

My.iniファイルも文字コードはSJISに置き換えてあり 何が原因かつかめません

*VBコード
Dim MyConString As String
Dim MyConnection As OdbcConnection
Dim strSQL As String
Dim myOdbcCommand As OdbcCommand
Dim iRet As String

MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + _
"SERVER=localhost;" + _
"PORT=3306;" + _
"DATABASE=kanri_db;" + _
"UID=xxxx;" + _
"PASSWORD=xxxx;" + _
"OPTION=3;" + _
"CHARSETENCODING=sjis"

'Connection
MyConnection = New OdbcConnection(MyConString)
'myConn.Open()
MyConnection.Open()
Console.WriteLine("Connection State::" & MyConnection.State.ToString)

'SQL
strSQL = "select csv_subitem from tbl_readtempcsv where csv_subitem='ワークグループ';"

myOdbcCommand = MyConnection.CreateCommand
myOdbcCommand = New OdbcCommand
myOdbcCommand.Connection = MyConnection
myOdbcCommand.CommandType = CommandType.Text
myOdbcCommand.CommandText = strSQL

iRet = myOdbcCommand.ExecuteNonQuery

どなたかご教示いただけないでしょうか 宜しくお願いいたします

A 回答 (1件)

my.iniのCLIENT SECTIONのdefault-character-setはMySQLが提供するクライアントアプリケーションのための設定です。

そのため、ユーザ独自のクライアントアプリケーションは初期化時にキャラクタセットを設定する必要があります。

 質問者さんのコードでは、CHARSETENCODINGというパラメータを指定していますが、マニュアルを読む限りMySQLのODBCにはそのパラメータは存在しません。
 MySQLのODBCには STMT というパラメータがあり、ここに接続後に実行するステートメントを指定することができます。キャラクタセットを指定するステートメントは
  set names sjis (もしくは set character set sjis)
です。

コードの変更点としては
"CHARSETENCODING=sjis"

"STMT=set names sjis"
と変更することになります。
    • good
    • 0
この回答へのお礼

hirosa-ok様

有り難う御座います ご指摘いただいた内容で望んでいた動作の
確認が出来ました

誠に有り難う御座います

お礼日時:2007/02/16 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!