ASP.net:问号而不是阿拉伯文字

ASP.net: Question Marks instead of Arabic text

我正在使用 Visual studio 2015 Asp.net C#MySql workbench.

我有两个问题:

  1. 在向数据库中插入阿拉伯语数据时(MYSQL workbench),它 出现问号 ????? 我找到解决方案让我更改 数据类型由varchar转为nvarchar然后在前面加上大写N 阿拉伯字符串 (INSERT INTO TableName (ColumnName) values(N’ArabicText’)) 如何在此代码中应用它?我试图在中添加 N 不同的地方但没有用?
  2. 当我在MySQL中判断数据类型为NVARCHAR(45) workbench,程序出现消息:change applied successfully, 但是,当我打开 table 时,我发现 varchar(45) 又返回了。

     string query = "UPDATE learningobjects SET level=?level, subjectName=?    subjectName WHERE ID=?ID";
        using (MySqlCommand cmd = new MySqlCommand(query, cn))
        {
            cmd.CommandText = query;
            cmd.Parameters.AddWithValue("?level", Level);
            cmd.Parameters.AddWithValue("?ID", lblid.Text);
    
            cmd.Parameters.AddWithValue("?subjectName", txtsubject.Text);
    

MySQL不是SQL服务器,所以解决方法略有不同,但出现问号的原因是一样的。您看到的是一个字符转换错误,它可能发生在您的 request/response 链中的任何一点。

Microsoft SQL 服务器引入了 NCHARNVARCHARNTEXT 来处理 unicode。这些都是 Microsoft 特定的关键字,因此它们不适用于 MySQL。现在,MySQL 应该默认设置为处理 unicode 字符集,但以防万一您可能想查看这些链接:

为了安全起见,请确保您的连接字符串指定了字符集(如果 MySQL 的其余部分设置为 UTF 应该没问题)

最后,还有一点不容忽视,您的表单也需要符合 UTF 标准。 (ref)

<form action="demo_form" accept-charset="utf-8">
</form>

也可以用ASP.NET MVC这样指定:

@using (Html.BeginForm(null, null, FormMethod.Post, new { accept_charset = "utf-8" })) {
  <!-- content of form -->
}

我将从数据如何进入您的数据库开始,然后看看数据放入后会发生什么。

尝试使用 utf8/utf8mb4 时,如果您看到 问号 (常规问号,不是黑色菱形),

  • 要存储的字节未编码为utf8。解决这个问题。
  • 数据库中的列是CHARACTER SET utf8(或utf8mb4)。解决这个问题。
  • 另外,检查读取时的连接是否为utf8