将表情符号插入 SQL Server
Posted
技术标签:
【中文标题】将表情符号插入 SQL Server【英文标题】:Insert Emoticons into SQL Server 【发布时间】:2019-06-04 09:50:48 【问题描述】:我正在尝试将表情符号插入到我的 MS SQL 中。
我使用以下查询插入:
Dim command As New SqlCommand("INSERT INTO [dbo].[emoji]([Message]) VALUES('" & "????????????????????????????????????????☺️????????????????????????????????" & "')", SQLCon)
但在我的数据库上,它显示为???????
。
来自cmets Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 2017 年 8 月 22 日 17:04:49 版权所有 (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 10 Home 10.0 (Build 17134: )
我怎样才能将表情符号保存在 DB 中。
【问题讨论】:
列数据类型?列排序规则? 什么版本的 SQL Server? 我正在使用 nvarchar Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 2017 年 8 月 22 日 17:04:49 版权所有 (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 10 Home 10.0 (内部版本 17134:) 正如您在两个答案中看到的那样:您需要在文字字符串之前使用N
以指示服务器该字符串是 Unicode
【参考方案1】:
试试这个。
Dim command As New SqlCommand("INSERT INTO [dbo].[emoji]([Message]) VALUES(N'" & "??????????☺️????????" & "')", SQLCon)
【讨论】:
就个人而言,我会对其进行参数化,因为我怀疑该值来自用户输入;在 SQL 中注入值绝不是一个好主意。【参考方案2】:我强烈建议您对查询进行参数化,不要注入该值。然后,只要您将参数声明为正确的数据类型,就可以正常工作。所以像:
Dim Emojis As String = "??????????☺️????????"
Dim SQL As String = "Insert into [dbo].[emoji]([Message]) VALUES(@Message);"
Dim command As New SqlCommand(SQL,SQLCon)
command.Parameters.Add("@Message", SqlDbType.NVarChar,100).Value = Emojis 'Guessed Length for the parameter
【讨论】:
当然,数据库列数据类型也必须是nvarchar
才能正确存储这些字符。
OP 已经解决了 cmets 中的那个问题,@DanGuzman:“我正在使用 nvarchar”
支持“参数化您的查询”。 这很关键。
在这里听到反对意见会很有趣;原因是什么?什么是参数化不好或危险?如果是因为这个答案“更长”,我建议查找 SQL Injection。【参考方案3】:
你可以试试这个:
declare @t table (emoji nvarchar(50))
Insert into @t VALUES(N'??????????☺️????????')
select * from @t
【讨论】:
【参考方案4】:您应该为该列使用NVARCHAR
数据类型。
例如。
declare @tbl table(message nvarchar(50))
insert into @tbl values(N'????????')
select * from @tbl
我建议你必须使用 SqlParameter 来插入或更新 SQL 列中的数据。
【讨论】:
以上是关于将表情符号插入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章