如何在SQL Server中插入特殊字符?emoji显示为??问题求助
解决SQL Server中NVARCHAR列存储Emoji显示为??的问题
核心原因
- 排序规则限制:
SQL_Latin1_General_CP1_CI_AS基于单字节Latin1编码,无法识别Unicode补充字符(Emoji多属于4字节Unicode字符)。 - 插入语法疏漏:插入字符串时未添加
N前缀,导致SQL Server按非Unicode编码解析字符串,直接丢失Emoji字符。
分步解决方案
1. 修改列/数据库的排序规则
需将排序规则替换为支持Unicode补充字符的类型,推荐两种选择:
Latin1_General_100_CI_AS_SC:SC后缀代表支持补充字符,全版本SQL Server兼容Latin1_General_100_CI_AS_SC_UTF8:SQL Server 2019+支持,更贴合现代UTF-8编码需求
修改目标列排序规则
ALTER TABLE TableName ALTER COLUMN Title NVARCHAR(255) COLLATE Latin1_General_100_CI_AS_SC; ALTER TABLE TableName ALTER COLUMN Description NVARCHAR(255) COLLATE Latin1_General_100_CI_AS_SC;
(可选)修改数据库默认排序规则
若后续新建表也需要支持Emoji,可修改数据库默认规则(操作前需断开所有数据库连接):
ALTER DATABASE YourDatabaseName COLLATE Latin1_General_100_CI_AS_SC;
2. 插入数据时添加N前缀
插入字符串前必须加N标记,明确告知SQL Server这是Unicode字符串:
INSERT INTO TableName (Id, Title, Description) VALUES (1, N'This is my title 😀', N'Here is a description with a 📻 radio');
3. 验证存储结果
执行查询确认Emoji是否正常显示:
SELECT Id, Title, Description FROM TableName;
额外注意事项
- 应用程序连接字符串需配置正确的字符编码(如指定Unicode相关参数),避免数据传输过程中丢失字符。
- 若使用旧版SQL Server(2017及以下),只能选择带SC后缀的排序规则,UTF8排序规则不被支持。
内容的提问来源于stack exchange,提问作者chandler
相关产品推荐
相关产品推荐

