• 締切済み

C#からMySQLにデータを書き込んだ時の文字化け

お世話になります。 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を基準にしています。 以上、よろしくお願いいたします。

みんなの回答

回答No.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のセットアップ方法とか学ばないといけないの面倒だし。

  • FoolWord
  • ベストアンサー率73% (14/19)
回答No.1

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

関連するQ&A