【问题标题】:C#: Unicode from a string with MySQLC#:使用 MySQL 的字符串中的 Unicode
【发布时间】:2010-10-20 21:13:47
【问题描述】:

我正在尝试将字符串插入 MySQL 数据库。我可以通过在服务器上运行查询来插入它,但是当我尝试使用我的 C# 源文件插入“Iñtërnâtiônàlizætiøn”时,我得到“Iñtërnâtiônàlizætiøn”。我尝试将其添加为参数并将 ;charset=utf8 添加到我的连接字符串中,但没有运气。数据库中的表具有 utf8 作为其字符集。我是不是错过了什么。

这是我的代码(使用 StringBuilder):

sqlBuffer.Append(
    string.Format(
        @"INSERT `resources` (id, somefield) 
        VALUES (20004,'Iñtërnâtiônàlizætiøn');");

【问题讨论】:

  • SQL Server 也会发生同样的情况,即使我删除了 @。我对此完全感到困惑。我什至尝试添加以转义的 unicode 格式 (\uXXXX) 指定字符串。
  • 在 SQL Server 上,您的数据库字段是 nvarchar 吗,您是否使用 N'' ("INSERT resources (id, somefield) VALUES (20004, N'Iñtërnâtiônàlizætiøn');")?跨度>
  • 这是一个 nvarchar,我使用的是 N'

标签: c# mysql unicode encoding utf-8


【解决方案1】:

您需要用 N'' 或 _utf8'' 指定它是 unicode/utf8:

sqlBuffer.Append(
    string.Format(
        @"INSERT `resources` (id, somefield) 
        VALUES (20004, N'Iñtërnâtiônàlizætiøn');");

【讨论】:

  • 恐怕运气不好,运行查询时还是一行垃圾。
  • 顺便说一句,您是否使用编码保存了包含文本“Iñtërnâtiônàlizætiøn”的 .cs 文件?勾选VS,另存为并点击保存命令上的箭头。
  • 您确定数据库中的数据不正确吗?你用来查询的工具支持UTF8吗?
  • 是的,无论我是用GUI工具还是浏览器查看,都是一样的。当我使用相同的 GUI 工具手动运行查询时,我可以在两者中查看正确的数据。
  • 我唯一能做的就是删除那行,但我想真正演示 UTF8。
【解决方案2】:

您可能需要选择正确的文化并将其提供给 string.Format。 您可能想阅读http://msdn.microsoft.com/en-us/library/1ksz8yb7.aspx,它启发了下面的示例(警告:未经测试!):

using System.Globalization;

// ...

string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };    

// this loop will inject your string using various cultures
foreach (string cultureName in cultureNames)
{
   CultureInfo culture = new CultureInfo(cultureName);

   sqlBuffer.Append(
     string.Format(culture,
       @"INSERT `resources` (id, somefield) 
       VALUES (20004, N'Iñtërnâtiônàlizætiøn');");
}

请注意,您还需要检查有关字符集排序规则的表设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2019-01-24
    • 2014-06-18
    • 1970-01-01
    • 2014-06-12
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多