我正在使用Windows 2008 Server上的SQL Server 2008数据库。每当我尝试将表情符号存储在我的表格中时,它都会将其转换为奇怪的外观框。当我尝试在SQL Server 2012中存储相同的表情符号时,它可以存储表情符号。是否无法在SQL Server 2008中正确存储表情符号?我现在真的无法更新,所以这不是一个选择。
答案 0 :(得分:0)
我们所知道的是基于问题的详细信息和对该问题的评论
NVARCHAR
我们不知道的地方:
如何检索字符以确定其是否正确存储?
基于上述内容:
此很可能是字体问题。我之所以这样说,是因为:
??
(每个替代字符一个),而不是单个方框。NCHAR
,NVARCHAR
和NTEXT
列中,而无需考虑该列或当前数据库的排序规则。为了对此进行测试,我在默认排序规则为SQL_Latin1_General_CP1_CI_AS
的数据库中执行了以下命令,因此那里肯定没有“辅助字符支持”。
SELECT NCHAR(0xD83D) + NCHAR(0xDE31) AS [ScreamingFace],
NCHAR(0xD83D) + NCHAR(0xDDFA) AS [WorldMap],
NCHAR(0xD83D) + NCHAR(0xDF08) AS [Alchemical Symbol for Aqua Vitae];
它返回:
ScreamingFace WorldMap Alchemical Symbol for Aqua Vitae
我在不同的区域看到不同的东西,这都是由于字体的不同。下表显示了我所看到的:
LOCATION FONT Screaming Face World Map Aqua Vitae
------------ ------------ -------------- --------- ----------
Text Editor Consolas Yes Yes Square box w/ question mark
Grid Results Code2003 Yes Yes Yes
Text Results Courier New Yes Yes Empty square box
您很可能在使用两种不同版本的SSMS,或者至少在两台不同计算机上使用了SSMS。在这两种情况下,您可能都将不同的字体映射到“网格结果”,或者甚至在一个上使用了“网格结果”,而在另一个上使用了“文本结果”。
最后,如果您想知道数据是否正确存储,则需要检查已存储的字节。为此,只需将字符串列转换为VARBINARY(MAX)
:
SELECT CONVERT(VARBINARY(MAX), string_column)
FROM schema.table;
比较2008年和2012年系统中的那些结果。它们很有可能是相同的(或者说是“差不多”是在2.5年前)。