如何将SQL Server表中的ANSII字符修复为UTF-8

时间:2017-05-16 11:46:05

标签: sql-server utf-8 ansi

我有一个数据导入过程,用于将数据从csv文件导入SQL Server中的表。

我注意到有些列包含一些带重音的字符。

例如,我注意到数据库表中的以下文本

  

CAFA‰

我在Notepad ++中打开一个新文件,将编码更改为ANSI并使用上述文本保存文件。

然后将编码更改为UTF-8

结果是:

  

CAFÉ

我不确定出了什么问题。但有没有办法在数据库表中解决这个问题?

我想在数据库表中显示相同的CAFÉ而不是CAFÃ

因为当该列显示在网站上时,即使网页上的编码为UTF- *,它仍然会将字符串显示为CAF‰而不是CAFÉ。

我还检查了列的排序规则类型:

  

SQL_Latin1_General_CP1_CI_AS

谢谢,

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并结束了使用Integration Tools将表导出到MySQL并运行以下查询:

UPDATE myTable Set thefield= CONVERT(BINARY CONVERT(thefieldUSING latin1) USING utf8);

这是我能够解决它的唯一方法。

答案 1 :(得分:1)

我有类似的问题,我通过将文件(在我的情况下是一个sql脚本)从UTF-8转换为ANSI来解决它,因为SQL Server无法识别UTF-8编码。它对我有用,因为我只需要ANSI字符。

答案 2 :(得分:0)

通过在此网站http://www.i18nqa.com/debug/utf8-debug.html

中创建预期字符与实际字符之间的映射表,我想出了一个解决方案

一旦我有了映射表,然后就加入了我的原始表格,其中就像实际字符一样,并将这些字符替换为预期字符。

UPDATE rd
SET rd.Name = REPLACE(Name, m.Actual,m.Expected)
FROM RawData rd
INNER JOIN dbo.UtfMapping m ON  rd.Name LIKE '%'+m.Actual+'%'

答案 3 :(得分:0)

基于SQL - UTF-8 to varchar/nvarchar Encoding issue

创建自定义函数如下:

CREATE FUNCTION dbo.convert_utf8(@utf8 VARBINARY(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @rslt NVARCHAR(MAX);

    SELECT @rslt=
    CAST(
          --'<?xml version="1.0" encoding="UTF-8"?><![CDATA['
        + @utf8
        --']]>'
        
    AS XML).value('.', 'nvarchar(max)');

    RETURN @rslt;
END
GO

然后按如下方式更新损坏的字段:

update [my_table] set my_field = dbo.convert_utf8(cast(my_field as varbinary(MAX))) 

我在 SQLServer 2019 中测试过