【问题标题】:Sql server 2005 with ASP .NET encoding issue带有 ASP .NET 编码问题的 Sql server 2005
【发布时间】:2011-04-12 21:45:46
【问题描述】:

我再次写下我的编码问题...现在有一些代码示例。

简而言之:当保存到数据库输入数据时,某些语言特定的字符(如波兰语“ń”)将不会保存 - 插入的“n”被保存。另一方面,字符串:Adams æbler,其中 æ 正在保存。

下面是代码开始的代码,它确实保存内容并显示数据:

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "";
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "SELECT * FROM users";
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                Label1.Text += reader.GetString(0);
            }                
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "INSERT INTO users VALUES('" + Surname.Text + "')";
            command.ExecuteNonQuery();
        }  
    }

Default.aspx 有元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

表格如下:

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL ) ON [PRIMARY]

我不知道还需要什么来解决这个问题。帮助表示赞赏。

谢谢,帕维尔

【问题讨论】:

  • 啊,当我发出:SELECT Surname, CAST(Surname AS VARBINARY(30)) AS Expr1 FROM Users,所谓的“ń”字符的字节为 0x6E00 - 所以在数据库中存储“n”字符.
  • 如果您在Button1_Click 中调试,Surnme.Text 是否包含正确的值?如果您使用 SQL Profiler,会向 SQL Server 发送什么值?
  • 是的。 Surname.Text 具有正确的值。还使用 Encoding.Unicode.GetBytes 检查它会返回“好”字节。我还没有用分析器检查它。
  • 并分析检查:INSERT INTO users VALUES('ń') 已发送...
  • 我觉得这个问题看起来很眼熟。我刚刚又看到了你的另一个问题。

标签: .net asp.net sql-server encoding utf-16


【解决方案1】:

我终于知道出了什么问题。我错过了字符串之前的 N 前缀(它将字符串标记为 UNICODE):

command.CommandText = "INSERT INTO users VALUES(N'" + Surname.Text + "')";

谢谢, 帕维尔

【讨论】:

    【解决方案2】:

    您的表定义似乎是问题所在。姓氏用COLLATE Latin1_General_CI_AI 定义。 AI 部分表示不区分重音。您需要将排序规则更改为 Latin1_General_CI_AS,以保留数据。

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2013-01-01
      • 2010-09-14
      相关资源
      最近更新 更多