【问题标题】:how to set VS2010 settings considering utf8 so i could send data to mysql database as they are如何设置考虑 utf8 的 VS2010 设置,以便我可以将数据原样发送到 mysql 数据库
【发布时间】:2012-09-07 21:25:54
【问题描述】:

我有一个 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

在传输过程中发生了一些事情。什么?我需要帮助吗?

【问题讨论】:

  • 你能放一些你的 C# 代码吗?
  • 看彼得,代码真的很简单。您在一个表单上有连接字符串、查询字符串、几个 texbox 和 btns,...,没什么大不了的。连接效果很好,但我只是没有将数据输入数据库,因为我将它们写入文本框并将它们发送到数据库。例如,如果我在数据库中的 textBox 中写入“Č”,我会看到“Č”,但是如果我在 textBox 中写入“Ž”并将其发送到我的数据库表中,我会在写给他时看到这封信。这就是混乱
  • @Sylca - 虽然代码可能很简单,但查看它会很有帮助,尤其是了解如何将编码应用于保存数据的字符串。
  • 你是对的@Chris :-),代码马上就会来

标签: c# mysql utf-8


【解决方案1】:

我认为您可以尝试修改连接字符串以将 charsetOption 添加到此>>>

string cs = @"server=localhost;userid=root;password=xxx;database=table;CharSet=UTF8";

【讨论】:

    【解决方案2】:

    这是转换字符串编码的代码

    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);
    

    【讨论】:

      【解决方案3】:

      尝试将表排序规则更改为 utf8_unicode_ci,因为我认为在你的排序规则中删除了重音,因为 š 等于 s 等等......并且所有小写字母都是大写的......尝试更改排序规则

      【讨论】:

      • heyyyyy,我现在应该有“Đ”了!!!我们离解决方案越来越近了!
      • 不客气...但是š č ť 等等呢?仍然转换为 s c t ...?
      • 我知道...如果您在 winform 应用程序中使用中欧字符集,请将排序规则设置为中欧排序规则> dev.mysql.com/doc/refman/5.0/en/charset-ce-sets.html
      • "š 和 ž" 没问题。但仍然没有“č 和 ć”,它们仍然转换为“c 和 c”。是的,对于你的这个命题,字母必须大写(đ 必须大写“Đ”才能正确插入 db )。还在尝试,...
      • 你可以尝试添加 CharSet=UTF8;到您的连接字符串> string cs = @"server=localhost;userid=root;password=xxx;database=table;CharSet=UTF8";
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2018-12-15
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多