Unicode数据未使用webapi以正确的格式保存在sql数据库中

Posted

技术标签:

【中文标题】Unicode数据未使用webapi以正确的格式保存在sql数据库中【英文标题】:Unicode data is not saved in right format in sql database using webapi 【发布时间】:2018-02-09 00:33:48 【问题描述】:

当我尝试在我的数据库中保存 Unicode 数据(例如中文)时,它会在 sql 数据库表中保存为问号 ???????

    public  IHttpActionResult SaveSelections(UserPreference model)
    
        var user = db.UserPreferences.FirstOrDefault(p => p.UserName == model.UserName);
        //var psellers= db.PSellers.ToArray();
        if (user == null)
        
            try
            
                db.UserPreferences.Add(model);
                db.SaveChanges();
            
            catch (Exception e)
            
                return BadRequest(e.Message);
            
        
        else
        
            try
            
                user.AreaText = model.AreaText;
                user.RegionText = model.RegionText;                    

                db.SaveChanges();
            
            catch (Exception e)
            
                return BadRequest(e.Message);
            

        
        return Ok();
    

【问题讨论】:

您是否使用 UTF8 编码创建了数据库?如果未指定,则默认为 ASCII。 NO 我没有创建为 UTF8 编码 那是你的问题。您不能使用 ASCII 编码将 unicode 字符存储在数据库中。最安全的方法是使用 unicode 编码创建新数据库并将当前数据传输到新数据库。将作为答案发布... 【参考方案1】:

正如您在对问题的评论中所说,您的数据库接受 UTF8 而是接受 ASCII。为了让数据库接受 unicode 字符,您必须执行以下命令:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_general_ci;

欲了解更多信息,请参阅Database Character Set and Collation。

所以基本上,创建新数据库并将当前数据传输到它。如果你不知道怎么做,答案是here。

【讨论】:

这可以在 Sql server 中使用吗?因为我无法创建 utf8 数据库 哦,您使用的是 SQL Server。以上是针对 mysql 的。 SQL Server 创建数据库时的默认字符集是 UTF8。但是你必须使用nvarchar而不是varchar nvarchar 如果我插入“(주)타이호인스트-KR”也不起作用,那么在表格中它将更新为“(?)??????-KR”

以上是关于Unicode数据未使用webapi以正确的格式保存在sql数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Grails 未正确编码 unicode 字符

CouchDB 以 XML 格式返回数据

如何以 unicode (BE) 格式将数据存储在 CFDataRef 中?

Unicode 字体在 Chrome 上未正确显示

从 WebAPI 获取 PDF 并从 UI 下载,但数据已损坏

WTForms 以 unicode 格式从表单中引入数据