0

我在一个窗口应用程序(C#)中工作,数据库是 MySQL。在应用程序中,我正在获取 gmail 收件箱并将其保存到数据库中。但是我的问题是,当我在代码中使用插入查询时,Subject或者message在印地语中显示消息的列中,但是当保存在数据库中时,它会显示????????这样的字符。我已经在 MySQL 中更改了 UTF-8 中的所有内容。

当我使用 MySQL 编辑器插入相同内容时,它会保存在印地语字体中。这对我来说是一个奇怪的情况,因为我是 MySQL 新手。

  foreach (ImapMessageInfo message in messages)
        {

            InsertMail(message.UniqueId, message.Sender.ToString(), message.To.ToString(), message.Subject.Trim(), message.Date.LocalTime, client.GetMailMessage(message.SequenceNumber).BodyText);

        }



 public void InsertMail(string uid, string from, string to, string subject, DateTime datetime, string message)
    {
        try
        {

            MySqlCommand cmd = new MySqlCommand();

            cmd.Parameters.AddWithValue("@unique_id", uid);
            cmd.Parameters.AddWithValue("@sender", from);
            cmd.Parameters.AddWithValue("@reciever", to);
            cmd.Parameters.AddWithValue("@subject", subject);
            cmd.Parameters.AddWithValue("@date", datetime);
            cmd.Parameters.AddWithValue("@message", message);

            cmd.Parameters.AddWithValue("@mail_status", "unread");
            cmd.Connection = con;
            string query = "Insert Ignore into gmail_inbox(unique_id,sender,reciever,subject,date,message,mail_status) values (@unique_id,@sender,@reciever,@subject,@date,@message,@mail_status) ";
            cmd.CommandText = query;
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {

        }

    }
4

5 回答 5

1

检查数据库的字符集和排序规则。使用 UTF8 应该可以让您正确保存这些内容并正确显示它们。还要确保在初始化连接时将连接字符集设置为 utf8,否则可能会出现其他错误。

基本上你需要确保列/表和连接字符集是 utf8,然后你应该可以插入你想要的数据。

于 2013-04-12T13:58:04.353 回答
0

尝试这个:

// mytable=2 fields id(Auto increment),title(nvarchar(max))
string title = "बिलाल";

SqlCommand cmd = new SqlCommand("insert into mytable values (N'" + title + "')", con);

con.Open();
cmd.ExecuteNonQuery();
con.Close();
于 2017-08-09T09:15:26.860 回答
0

对于每个数据库:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

对于每个表:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

对于每一列:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#update database properties
datasource.url = jdbc:mysql://localhost:3306/DBName?useUnicode=yes&characterEncoding=UTF-8
于 2020-09-05T10:42:13.443 回答
0

按照步骤:

  1. 在我的 sql 中更改"utf8 - default collection"表中的集合。

在此处输入图像描述

  1. 添加"Character Set=utf8;"到连接字符串中。

    <appSettings>
        <add key="ConnString" value="Server=xxxxx; Port=3306; Database=books;Uid=xxxx; Pwd=xxxx; Convert Zero Datetime=True; Character Set=utf8;" />
    </appSettings>
    
于 2019-09-24T17:31:45.160 回答
0

1) 使用以下查询将表排序规则设置为 utf8_unicode_ci

alter table <table_name> convert to character set utf8 collate utf8_unicode_ci;

2)你需要修改你的连接字符串并添加 Character Set=utf8 它应该是这样的

"User Id=YourUserID;Password=YourPassword;Port=3306;Database=YourDatabaseName;Character Set=utf8;
于 2016-06-30T10:33:13.543 回答