電子書籍の厳選無料作品が豊富!

お世話になります。

C#でMySQLにアクセスしようとしています。
文字列以外はできているのですが、文字列の入力、
取得で文字化けしてしまいます。

対処の方法をご指導いただけますよう、お願いいたします。

下記がコードになります。

string myConnectionString = "Database=test;Data Source=localhost; User Id=root;Password=''";
MySqlConnection myConnection = new MySqlConnection(myConnectionString);

string mySelectQuery = "insert into characters values('5','あいうえおかきくけこ','10','3')";
                                           ↑この文字列が化ける

MySqlCommand myCommand = new MySqlCommand(mySelectQuery, myConnection);
myConnection.Open();
MySqlDataReader myReader;
myReader = myCommand.ExecuteReader();
myReader.Close();
myConnection.Close();

mySelectQuery = "SELECT * FROM characters";
myCommand = new MySqlCommand(mySelectQuery, myConnection);
myConnection.Open();
myReader = myCommand.ExecuteReader();

while (myReader.Read())
{
MessageBox.Show(myReader.GetString(0) + ", " + myReader.GetString(1));
}
myReader.Close();
myConnection.Close();

なお、MySQLはUTF-8を基準にしています。

以上、よろしくお願いいたします。

A 回答 (2件)

俺だったら…


ZIP Archiveの方で公開されているソースを見ながら
http://dev.mysql.com/downloads/connector/net/
例えばdatareader.csに
public override String GetString(int i){
IMySqlValue val = GetFieldValue(i, true);
if (val is MySqlBinary){
byte[] v = ((MySqlBinary)val).Value;
//ここ追加
System.Console.WriteLine("routeA");
System.Console.WriteLine(resultSet.Fields[i].Encoding.ToString());
for(int j = 0 ;j < v.Length; j++){
System.Console.WriteLine(v[j].ToString());
}
return resultSet.Fields[i].Encoding.GetString(v, 0, v.Length);


}
//ここ追加
System.Console.WriteLine("routeB");
System.Console.WriteLine(val.Value.ToString());
return val.Value.ToString();
}

みたいに書き換えてビルドし直して原因を探るかな(当然これだけでは治らない。)

#実際にビルドできるか試してすらいない。MySQLのセットアップ方法とか学ばないといけないの面倒だし。
    • good
    • 0

MySQLがUTF-8を基準にしているのなら、2バイトコード(あいうえおかきくけこ)もUTF-8にエンコードしてからINSERTし

てやればよろしいのではないでしょか?
    • good
    • 0

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