我有一个数据导入过程,用于将数据从csv文件导入SQL Server中的表。
我注意到有些列包含一些带重音的字符。
例如,我注意到数据库表中的以下文本
CAFA‰
我在Notepad ++中打开一个新文件,将编码更改为ANSI并使用上述文本保存文件。
然后将编码更改为UTF-8
结果是:
CAFÉ
我不确定出了什么问题。但有没有办法在数据库表中解决这个问题?
我想在数据库表中显示相同的CAFÉ而不是CAFÃ
因为当该列显示在网站上时,即使网页上的编码为UTF- *,它仍然会将字符串显示为CAF‰而不是CAFÉ。
我还检查了列的排序规则类型:
SQL_Latin1_General_CP1_CI_AS
谢谢,
答案 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 中测试过