• 締切済み

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

  • VB データグリッドビューへの表示

    すみません。教えてください。 ほぼMYSQLのMySqlDataReaderあたりのサンプルなのですが Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ReadMyData("server=localhost;user=root;database=hoge;port=3306;password=xxxx;") End Sub Public Sub ReadMyData(ByVal myConnString As String) Dim mySelectQuery As String = "SELECT OrderID, CustomerID FROM Orders" Dim myConnection As New MySqlConnection(myConnString) Dim myCommand As New MySqlCommand(mySelectQuery, myConnection) myConnection.Open() Dim myReader As MySqlDataReader myReader = myCommand.ExecuteReader() ' Always call Read before accessing data. While myReader.Read() Console.WriteLine((myReader.GetInt32(0) & ", " & myReader.GetString(1))) End While ' always call Close when done reading. myReader.Close() ' Close the connection when done with it. myConnection.Close() End Sub 'ReadMyData End Class でWhile myReader.Read()あたりで呼んでコンソールに書いていっていると思うのですが、これをDataGridView1へ出力したいと思っています。 調べても、いろいろ試してもできません。 どなたかわかる方お教え願います。 MYSQL5.0で VB2008ExpressEditionです。

    • ベストアンサー
    • MySQL
  • using文の使い方について

    visual C# 2010 Express を使用しています。 MySqlConnectionのデータベースのコネクション部分だけを次のようなメソッドとして、 そのオブジェクトだけを得たいと思いまして、次のような感じにしたのですが、 class Program { static void Main(string[] args) { MySqlConnection conn = GetConnection(); using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM tbl where id = '1'", conn)) { conn.Open(); MySqlDataReader reader = null; reader = cmd.ExecuteReader(); reader.Read(); int i = reader.GetInt32(reader.GetOrdinal("id")); Console.WriteLine(i.ToString()); Console.ReadLine(); conn.Close(); } } static MySqlConnection GetConnection() { string connStr = "server=localhost;Database=test;Uid=root;Pwd="; using (MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr)) { return conn; } } } 一応これで表示できたのですが、 これで生成したMySqlConnectionはちゃんと開放(消滅)されているのでしょうか? このようなやり方でデータを取得しているのを見たことがないで 大丈夫なのかな?と思いました。。

  • C# で発生したException.MessageをMysqlに登録した際に文字化けが発生する

    C# で発生したException.MessageをMysqlに登録した際に文字化けが発生する. すいませんが、皆様のお力をお貸しください。 以下のようなコードでC#で発生した例外の情報をMySQLに登録しようとしていますが、「??????????????」の様に文字化けして日本語が登録できません。 ---- C#のコード public void errorLog(Exception exception){ MySqlConnection mySqlConnection = new MySqlConnection(); mySqlConnection.ConnectionString = "Database=airreserve;Data Source=localhost;User Id=root;Password=root"; mySqlConnection.Open(); MySqlCommand mySqlCommand = mySqlConnection.CreateCommand(); StringBuilder sql = new StringBuilder(); sql.Append(" INSERT INTO system_error_log ("); sql.Append(" error_message, "); sql.Append(" error_detail, "); sql.Append(" update_time "); sql.Append(" ) VALUES ( "); sql.Append(" @message, "); sql.Append(" @error, "); sql.Append(" now() "); sql.Append(" ) "); mySqlCommand.CommandText = sql.ToString(); mySqlCommand.Parameters.AddWithValue("@message", exception.Message); mySqlCommand.Parameters.AddWithValue("@error", exception.StackTrace); mySqlCommand.ExecuteNonQuery(); } ---- MySQLの設定 -------------- mysql Ver 14.12 Distrib 5.0.85, for Win32 (ia32) Connection id: 3 Current database: airreserve Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.85-community-nt MySQL Community Edition (GPL) Protocol version: 10 Connection: localhost via TCP/IP Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 8 hours 8 min 34 sec Threads: 5 Questions: 581 Slow queries: 0 Opens: 54 Flush tables: 1 Open tables: 1 Queries per second avg: 0.020 --------------

  • Mysqlへの接続に関して

    MysqlへVisual Studio 2008 のC#で接続しようとしています。 接続方法としては、クライアントから"mysql-connector-net-6.1.5"をインストールして ODBCを使わずに接続しようとしています。 参照設定で、"MySql.data"を指定し、以下のように記述しましたが、どうしても下記の ようなエラーが出力されてしまいます。 原因がわかりましたら教えて頂きたいと思います。 《記述内容》 using MySql.Data.MySqlClient; string sqlcmd = "userid=root;" + "password=000000;" + "database=db_name;" + "Host=999.999.999.999"; string cmdstr, cmdcnt; cmdstr = "select * from t_user ;"; MySqlDataReader reader = null; MySqlConnection conn = new MySqlConnection(sqlcmd); //MySQLコマンド MySqlCommand selcmd = new MySqlCommand(cmdstr, conn); //MySQL接続 conn.Open(); この conn.Open(); のところで下記のエラーが出てしまう。 //エラー内容 Unable to connect to any of the specified MySQL hosts. よろしくお願いします。

    • ベストアンサー
    • MySQL
  • VB2008の文字列のエンコードについて

    環境:VB 2008 ExpressEdition SP1 データベース:MySQL5.0 上記の環境にて、カラムから文字列を取得しようとしているのですが 元々サーバー側のエンコードが今回作るアプリ専用に設計された訳ではなく、PHP等での閲覧に対応する為ににキャラクタセットをUTF-8で設計、運用しています。 ODBC3.51を用いて、データベースに接続しデータを取得しようとしているのですが、取得したデータが文字化けを起こしてしまいます。 Debug.Print(hoge)で出る、デバッグの文字列が ???? ?? となってしまいます。 文字列をエンコードする為の手立てをお教え願えませんでしょうか。 よろしくお願いいたします。 'SQLの設定 strsql = "SELECT * FROM HOGE" MyConnection.Open() Dim MyCommand As New OdbcCommand MyCommand.Connection = MyConnection MyCommand.CommandText = strsql Dim MyDataReader As OdbcDataReader MyDataReader = MyCommand.ExecuteReader While MyDataReader.Read() Debug.Print(CStr(MyDataReader("hoge"))) End While

  • C# を使って、ODBC経由でMySQLへアクセスしようと思い、あるサ

    C# を使って、ODBC経由でMySQLへアクセスしようと思い、あるサンプルを用いてアクセス をしました。 その結果としては、正しくアクセスでき、サンプル通りに動きましたが、どうもそれぞれの 記述の意味がつかめません。。。 下の記述の中の(1)~(4)のところの記述の意味を教えて頂ければと思います。 (1)に関しては OdbcConnectiion というのがどういう使い方をしているのかわからず。。。 初心者で申し訳ありません。教えて下さい。 //Connection string for Connector/ODBC 3.51 string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=999.999.999.999;" + "DATABASE=TEST;" + "UID=TEST;" + "PASSWORD=******;" + "OPTION=3"; //Connect to MySQL using Connector/ODBC (1) OdbcConnection MyConnection = new OdbcConnection(MyConString); MyConnection.Open(); //Create a sample table OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net", MyConnection); (2) MyCommand.ExecuteNonQuery(); MyCommand.CommandText = "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)"; MyCommand.ExecuteNonQuery(); //Insert MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(10,'venu', 300)"; Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery()); ; //Fetch MyCommand.CommandText = "SELECT * FROM my_odbc_net"; (3) OdbcDataReader MyDataReader; (4) MyDataReader = MyCommand.ExecuteReader(); while (MyDataReader.Read()) { //Supported only by Connector/ODBC 3.51 Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " + MyDataReader.GetString(1) + " " + MyDataReader.GetInt64(2)); }

  • VB.netでのMySQLの接続エラーについて

    VB.netでのMySQLの接続エラーについて 『行いたい事』 レンタルサーバー(ロリポップ)で管理しているサイトのデータベース(MySQL)にパソコンから接続したいと考えています。 パソコンからレンタルサーバーで管理しているデーターベースにアクセスするための言語はVB.netを使用しています。 パソコンからVB.netにてSQLを使用してサーバーにあるデータベースのデータの取得等を行いたいと考えています。 『問題』 下記プログラムにてstrPasswordに直接、レンタルサーバー(ロリポップ)より取得したパスワードを記載しているのですが、Open() 時にエラーとなってしまいます。 下記★の部分が、会社からインターネットに接続する為のプロバイダーから取得しているパスワードに自動的に変わってしまいます。 基本的な事で申し訳ありませんが、ご教授のほどよろしくお願いします。 ●環境 ・Windows XP ・Visual Studio 2008 ・.NET Framework3.0 sp2 端末からデータベースへアクセスするためにConnector/Netを入手しインストールも行っています。 ●-----エラー内容----- Access denied for user 'ユーザID'@'★ここが変わっています★' (using password: YES) ●-------------------- ●-----プログラム----- Dim strServerName As String = "●●.lolipop.jp" Dim strUserID As String = "ユーザID" Dim strPassword As String = "パスワード" Dim strDataBaseName As String = "データベース名" Dim sqlStr As String Dim dr As MySqlDataReader Dim cmd As MySqlCommand Dim MySql As New MySqlConnection '接続パラメータ定義. Dim strParam = String.Format("Server={0};User ID={1};Password={2};Initial Catalog={3};Convert Zero Datetime=true", _ strServerName, strUserID, strPassword, strDataBaseName) '接続準備 MySql = New MySqlConnection(strParam) '接続 MySql.Open() ★この行でエラーとなり書き換わっています。 'クローズ MySql.Close() ●------------------

  • DataGridの使用方法を教えてください

    VB.NET2002で表形式で表示(参照のみ)させたいのですが,FlexGridはないようでDATAGridを使用するように書いてありましたが, DATAGridの使用方法がよく分かりません. どのような手順をふんでコードを記述するのか教えてください. 1,フォームにDATAGrid1を貼り付け. (ボタンも貼り付け,ボタンクリックでSQL実行,表示のイメージ) 2,Btn1_Clickに以下コード記述.色々参考にしていたらよく分からない状態になってしまいました... Q.フォームのプロパティでのデザインは必須なんでしょうか? Dim myConnection As New System.Data.OleDb.OleDbConnection(sConnectionString) Dim myCommand As New OleDb.OleDbCommand _ ("select * from データ", myConnection) Dim myReader As OleDb.OleDbDataReader Dim dst As New DataSet("Table") 'DataTable("DataTable") dst.Tables.Add(New DataTable("dst")) Dim dc As DataColumn myConnection.Open() myReader = myCommand.ExecuteReader 'データの読み込み While (myReader.Read) DataGrid1.DataSource = myReader.GetValue(0) End While DataGrid1.SetDataBinding(dst, "dst") myConnection.Close() myConnection = Nothing myReader.Close() myReader = Nothing myCommand = Nothing myConnection.Close() 'データベース閉じる myConnection = Nothing

  • VB.NetによるMySQL接続について

    VB.NET(2012)よりMySQLへの接続についてご教示ください。 現状、下記のようなエラーが発生し、DB接続ができない状況です。 'MySQLConnection' は、名前空間 'MySql.Data.MySqlClient' では不適切です。 'MySQLCommand' は、名前空間 'MySql.Data.MySqlClient' では不適切です。 'MySQLDataReader' は、名前空間 'MySql.Data.MySqlClient' では不適切です。 【ソース】 Imports MySql.Data.MySqlClient Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim con As MySQLConnection Dim cmd As MySQLCommand Dim dr As MySQLDataReader End Sub End Class 【設定】 Connector/NETのインストール メニューのプロジェクト→参照の追加→拡張よりMySql.Dataを指定 メニューのプロジェクト→DB_Accessのプロパティ→参照よりMysql.Data→プロパティ内のローカルコピー:True 参照よりインポートされた名前空間(I)→Mysql、Mysql.Data・・・その他Mysqlのチェックをオン 【環境】 OS:Windows7 開発:.Net2012 DB・サーバ環境:XAMPP(アパッチ、MySQL) HPでいろいろ調べましたがどれも似たような内容の為、解決できておりません。 何か足りないのでしょうか。 何卒、ご教示のほどよろしくお願い致します。

  • MySQLのblob型の日本語文字列を取得すると文字化けする

    MySQLに接続し、Blob型の日本語データを取得したのですが、 文字化けしてしまいます。 new Stringを使っているのですが、うまくいきません。 今は以下のような流れになっております。 まずstr_orgにデータを格納して、次にnew Stringで変換してstr_chgに格納しております。 しかしstr_chgの文字列が文字化けしてしまいます。 何が原因か分かりますでしょうか? ちなみに現在は、my.confで[default-character-set=]の設定はは行なっておりません。 String url = "jdbc:mysql:///DATABASE?useUnicode=true"; String usr = args[0]; String pwd = args[1]; Srting key = args[2]; Connection con = DriverManager.getConnection(url,usr,pwd); PreparedStatement pstmt; pstmt = con.prepareStatement("SELECT * from quote_hdr WHERE qh_id = ?"); pstmt.setString(1,key); rs = pstmt.executeQuery(); String str_org = rs.getString("qh_cmts"); String str_chg = new String(qh_cmts.getBytes("8859_1"));

専門家に質問してみよう