Я перенес базу данных с mysql на SQL Server (политика), исходную базу данных mysql с использованием UTF8.
Теперь я прочитал /dba/7346/sql-server-2005-2008-utf-8-collation-charset, что SQL Server 2008 не поддерживает utf8, это шутка?
На SQL Server размещено несколько баз данных, в основном с латинской кодировкой. Поскольку перенесенная база данных предназначена для веб-публикации, я хочу сохранить кодировку utf8. Я что-то пропустил или мне нужно добавить / дек на уровне приложения?
sql-server
utf-8
Teson
источник
источник
Ответы:
Нет! Это не шутка.
Взгляните здесь: http://msdn.microsoft.com/en-us/library/ms186939.aspx
А также здесь: http://en.wikipedia.org/wiki/UTF-16
источник
mssql-client
может быть все. Java, .NET, C, PHP и т.д ... что значит клиент?UTF-8 - это не набор символов, это кодировка. Набор символов для UTF-8 - Unicode. Если вы хотите сохранить текст Unicode, вы используете
nvarchar
тип данных.Если база данных будет использовать UTF-8 для хранения текста, вы все равно не получите текст как закодированные данные UTF-8, вы получите его как декодированный текст.
Вы можете легко сохранить текст в кодировке UTF-8 в базе данных, но тогда вы не сохраните его как текст, вы сохраните его как двоичные данные (
varbinary
).источник
110xxxxx 10xxxxxx
в UTF-8 (гдеx
представляют биты данных), поэтому код символаF0
(00011110000
как 11 битов) кодируется как11000011 10110000
(вставка00011
из кода символа в первый байт и110000
во второй ) что естьC3 B0
.Похоже, это наконец-то будет поддерживаться в SQL Server 2019! SQL Server 2019 - что нового?
Обновление 2019-05-14:
Документация, похоже, сейчас обновлена и объясняет наши возможности, начиная с MSSQL 2019 в разделе « Поддержка сопоставления и Unicode ».
Обновление 2019-07-24:
Статья Педро Лопеса, старшего менеджера программы в Microsoft, о введении поддержки UTF-8 для базы данных SQL Azure
источник
Обратите внимание , что по состоянию на Microsoft SQL Server 2016, UTF-8 поддерживается
bcp
,BULK_INSERT
иOPENROWSET
.Приложение 2016-12-21: SQL Server 2016 SP1 теперь включает сжатие Unicode (и большинство других функций, которые ранее использовались только для Enterprise) для всех версий MS SQL, включая Standard и Express. Это не то же самое, что поддержка UTF-8, но дает аналогичное преимущество, если целью является сокращение дискового пространства для западных алфавитов.
источник
Два UDF для работы с UTF-8 в T-SQL:
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
источник