我已经将一个数据库从mysql迁移到SQL Server (politics),原始的mysql数据库使用UTF8。
现在我在https://dba.stackexchange.com/questions/7346/sql-server-2005-2008-utf-8-collation-charset上看到SQL Server2008不支持utf8,这是在开玩笑吗?
SQL Server托管多个数据库,其中大部分是拉丁语编码的数据库。由于迁移的数据库是用于web发布的,所以我想保留UTF8编码。我是否遗漏了什么,或者我是否需要在应用程序级别进行enc/dec?
发布于 2015-08-21 05:23:28
UTF-8不是一个字符集,它是一种编码。UTF-8的字符集是Unicode。如果要存储Unicode文本,则使用nvarchar
数据类型。
如果数据库使用UTF-8存储文本,您仍然不会将文本作为编码的UTF-8数据提取出来,而是将其作为解码的文本提取出来。
您可以很容易地将UTF8编码的文本存储在数据库中,但是您不会将其存储为文本,而是将其存储为二进制数据(varbinary
)。
发布于 2018-11-24 22:33:07
在T-SQL中处理UTF-8的两个UDF:
CREATE Function UcsToUtf8(@src nvarchar(MAX)) returns varchar(MAX) as
begin
declare @res varchar(MAX)='', @pi char(8)='%[^'+char(0)+'-'+char(127)+']%', @i int, @j int
select @i=patindex(@pi,@src collate Latin1_General_BIN)
while @i>0
begin
select @j=unicode(substring(@src,@i,1))
if @j<0x800 select @res=@res+left(@src,@i-1)+char((@j&1984)/64+192)+char((@j&63)+128)
else select @res=@res+left(@src,@i-1)+char((@j&61440)/4096+224)+char((@j&4032)/64+128)+char((@j&63)+128)
select @src=substring(@src,@i+1,datalength(@src)-1), @i=patindex(@pi,@src collate Latin1_General_BIN)
end
select @res=@res+@src
return @res
end
CREATE Function Utf8ToUcs(@src varchar(MAX)) returns nvarchar(MAX) as
begin
declare @i int, @res nvarchar(MAX)=@src, @pi varchar(18)
select @pi='%[à-ï][€-¿][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
while @i>0 select @res=stuff(@res,@i,3,nchar(((ascii(substring(@src,@i,1))&31)*4096)+((ascii(substring(@src,@i+1,1))&63)*64)+(ascii(substring(@src,@i+2,1))&63))), @src=stuff(@src,@i,3,'.'), @i=patindex(@pi,@src collate Latin1_General_BIN)
select @pi='%[Â-ß][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
while @i>0 select @res=stuff(@res,@i,2,nchar(((ascii(substring(@src,@i,1))&31)*64)+(ascii(substring(@src,@i+1,1))&63))), @src=stuff(@src,@i,2,'.'),@i=patindex(@pi,@src collate Latin1_General_BIN)
return @res
end
发布于 2016-07-20 05:57:32
请注意,从Microsoft SQL Server 2016开始,bcp
、BULK_INSERT
和OPENROWSET
都支持UTF-8。
附录2016-12-21: SQL Server 2016 SP1现在为所有版本的MS SQL启用统一码压缩(以及其他大多数以前仅供企业使用的功能),包括标准版和快捷版。这与UTF-8支持不同,但如果目标是减少西方字母表的磁盘空间,则会产生类似的好处。
https://stackoverflow.com/questions/12512687
复制相似问题