公式アカウントからの投稿が始まります

ExcelでMySQLを使おうと色々やっています。

エクセルからMySQLへデータを送る(?)ときに、全角文字が正しく転送(?)されていない感じなのです。具体的な例を挙げます。

・【test】というデータベースがある
・そのなかに【data】というテーブルがある
・【data】の中には【name】というフィールドがある

状況はこんな感じです。ここにデータを送るために以下のようなマクロを組みました。

Sub Set_Record(SET_DATA As String)
Dim cn As Variant
Dim sql As String

Set cn = CreateObject("ADODB.Connection")
cn.Open "dsn=msdasql.1;data source = test;"
cn.CursorLocation = 3

set_sql = "insert into data(name) values ( " & Chr(34) & SET_DATA & Chr(34) & ");"
cn.Execute set_sql
cn.Close
End Sub

引数SET_DATAに指定した文字列をデータベース【test】の【data】テーブルの【name】というフィールドにセットするというだけのものです。

ここでセットする文字数【SET_DATA】に、半角英数文字を指定すると、これはうまくいきます。確認するとちゃんとデータが入っていました。

しかしセットする文字数【SET_DATA】に全角文字列を指定すると、syntax error とかいうMySQLのエラーが出てしまいます。ここでエラー内容がVBAのエラーダイアログに表示されるのですが、【correct string value '\x88\xA2・・・・' for column 'data' at row 1】という感じで表示されます。あまり良く分かりませんがとりあえず【'\x88\xA2・・・・'】というデータは入力できません、ということなのでしょうが、指定したのは例えば【あいうえお】や【小泉純一郎】などの全角文字列なのです。これって何かエクセルからMySQLへの転送のときに、変な感じになっちゃっているということなのだと思うのですが、私にはなんだか全然分かりません。

お願いします。助けてください!!!!!!!!!!!

※下に同じ質問がありますが、質問に記載したコードが間違っていたので、『コードが間違っているからできないんじゃないの?』というご指摘を回避するために、コードを直してもう一度同じ質問をさせていただきました。下の質問は回答がつかなければ、早急に削除します。
実際には別のマクロで掲載の問題が起こったのですが、教えてgooに書き込むにはちょっと長かったので質問用に同様の問題が起きるコードを短く書いたのですが、実行しないで投稿してしまい、こういう感じになっちゃいました。すみません。

A 回答 (2件)

>文字コードの情報は何を書けば良いでしょうか?



「status」コマンドや「show variables like '%char%'」を入力すると、サーバやクライアント、DBの文字コードの設定内容が表示されるはずです。
それらが、SJISになっていますか?
SJISになっているなら、以下の設定をしてみてください。

<方法1>
ODBCの設定画面の「Connect Option」タブに、Initial Statement という入力個所があるので、「SET NAMES SJIS」または「SET CHARACTER SET SJIS」を設定

<方法2>
(1)MySQL 5.0.13以降なら、my,ini またはmy.cnf のmysqld セクションに下記を追加
skip-character-set-client-handshake

(2)そして、MySQLを再起動
    • good
    • 0

>※下に同じ質問がありますが、~もう一度同じ質問をさせていただきました。

下の質問は回答がつかなければ、早急に削除します。

規約違反ですよ?
回答があるかを待つのでなく、早急に削除してください。
仮に誰かが回答してくれても、あなたが確認する前に削除されるかも知れません。

こういう質問をする場合は、MySQLのバージョン、文字コードといった情報を書きましょう。

(1)最初のSQLを実行する前に、「set names sjis」を実行してみてください。
(2)SQLが入力できる状態で、「status」または「show variables like '%char%'」といったコマンドを入力すると、文字コードの設定がどうなるか確認できるので確認してください。「sjis」等になってないと、日本語は扱えません。

この回答への補足

>規約違反ですよ?
>回答があるかを待つのでなく、早急に削除してください。

すみません。消したいのですが、多分投稿してから一定時間たたないと削除できないようなので(マイページからこの質問の削除をできるようですが、その削除ボタンが押せない感じです)、このようにしました。

文字コードの設定は最初からsjisにしてあります。
質問に記載するのを忘れていましたが、コマンドプロンプトからの入力であれば日本語の全角文字もちゃんと入力できることは確認できています。

>こういう質問をする場合は、MySQLのバージョン、文字コードといった情報を書きましょう。

MySQLのバージョンは5.0です。文字コードの情報は何を書けば良いでしょうか?

補足日時:2007/03/22 04:32
    • good
    • 0

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