0

テーブルを持つMYSQLデータベースがあります(文字セットはutf8-> utf8_general_ciにあります)。このテーブルに (MYSQLquery ブラウザー経由で) 文字列データを挿入すると、中央ヨーロッパの "ČĆŽŠĐ" 文字が正しく挿入されます。しかし、C#アプリケーション(単純なVS2010 Windowsフォームアプリケーション)を介して同じものを挿入しようとすると:

"Č"はテーブルで"C"を取得し、"Ć"はテーブルで"C"を取得し、"Đ"の場合は"D"を取得します。 「Ž」「Š」がいいです。

VS2010オプションまで、または...

なぜこれが起こっているのですか?

コード

クリック イベントで、テーブルにデータを送信します。

private void button1_Click(object sender, EventArgs e)
{
    string a= textBox1.Text;
    string b= textBox2.Text;
    int b= int.Parse(textBox3.Text);
    string d= textBox4.Text;

    string cs = @"server=localhost;userid=root;password=xxx;database=table";
    string myquerystring = "INSERT INTO table VALUES(0,'" +a+ "', '" +b+ "','"+c+"', '"+d+"')";

    try
    {
        conn = new MySqlConnection(cs);
        conn.Open();
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = myquerystring;
        cmd.ExecuteNonQuery();
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        if (conn != null)
        {
            conn.Close();
        }
    }

}

わかった、

私はこのエンコーディングロジックを試しました:

        string letters = "čćžšđ"; 

        byte[] byteENC = Encoding.UTF8.GetBytes(letters);

        Console.WriteLine("UTF-8  Text : {0}", Encoding.UTF8.GetString(byteENC));

そして、私はそれらをそのまま取得します。また、winフォームアプリでこれを行うと同じ結果が得られます(mboxの結果は正しいです)。

しかし、この同じ文字列をデータベースČĆĐに転送するとCCDになります。

転送中に何かが起こります。何?私は助けが必要です?

4

3 に答える 3

1

接続文字列を変更して、これに charsetOption を追加してみてください>>>

string cs = @"server=localhost;userid=root;password=xxx;database=table;CharSet=UTF8";
于 2012-09-10T08:04:46.247 に答える
1

文字列エンコーディングを変換するコードは次のとおりです

byte[] data = Encoding.ASCII.GetBytes(textBox1.Text);
string n = Encoding.UTF8.GetString(data);
MessageBox.Show(n);

編集:または、中央ヨーロッパのエンコーディングを取得できます

Encoding enc = Encoding.GetEncoding("windows-1250");
byte[] data = enc.GetBytes(textBox1.Text);
于 2012-09-07T22:08:26.917 に答える
0

テーブルの照合順序を utf8_unicode_ci に変更してみてください

于 2012-09-08T07:40:02.147 に答える