我已经将一个数据库从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?
发布于 2012-09-20 21:45:15
不是的!这不是开玩笑。
看看这里:http://msdn.microsoft.com/en-us/library/ms186939.aspx
固定长度nchar或可变长度nvarchar Unicode数据的
字符数据类型,并使用UNICODE UCS-2字符集。
这里还有:http://en.wikipedia.org/wiki/UTF-16
Unicode 2(2字节通用字符集)是一种类似的字符编码,在1996年7月的
标准2.0版中被UTF16所取代。
发布于 2015-08-21 05:23:28
UTF-8不是一个字符集,它是一种编码。UTF-8的字符集是Unicode。如果要存储Unicode文本,则使用nvarchar数据类型。
如果数据库使用UTF-8存储文本,您仍然不会将文本作为编码的UTF-8数据提取出来,而是将其作为解码的文本提取出来。
您可以很容易地将UTF8编码的文本存储在数据库中,但是您不会将其存储为文本,而是将其存储为二进制数据(varbinary)。
发布于 2018-09-24 21:26:01
看起来这将最终在SQL Server2019中得到支持!SQL Server 2019 - whats new?
来自BOL的
:
UTF-8支持
完全支持广泛使用的UTF-8字符编码作为导入或导出编码,或者作为文本数据的数据库级或列级排序规则。CHAR和VARCHAR数据类型中允许使用UTF-8,并在将对象的排序规则创建或更改为具有UTF8后缀的排序规则时启用。
例如,从LATIN1_GENERAL_100_CI_AS_SC到LATIN1_GENERAL_100_CI_AS_SC_UTF8。UTF-8仅适用于支持补充字符的Windows排序规则,如SQL Server 2012中引入的那样。NCHAR和NVARCHAR只允许使用UTF-16编码,并且保持不变。
根据所使用的字符集,此功能可能会显著节省存储空间。例如,使用支持NCHAR(10) -8的排序规则将具有ASCII字符串的现有列数据类型从CHAR(10)更改为UTF-8,可以将存储需求减少近50%。这是因为对于相同的Unicode字符串,NCHAR(10)需要22个字节来存储,而CHAR(10)需要12个字节。
2019-05-14更新:
文档现在似乎更新了,并在"Collation and Unicode Support“一节中解释了我们从MSSQL2019开始的选项。
2019-07-24更新:
Article by Pedro Lopes -微软高级项目经理介绍为Azure SQL数据库引入UTF8支持
https://stackoverflow.com/questions/12512687
复制相似问题