UTF-8 字符在 MS-SQL-Server 上的 INSERT 语句中发生更改
Posted
技术标签:
【中文标题】UTF-8 字符在 MS-SQL-Server 上的 INSERT 语句中发生更改【英文标题】:UTF-8 character gets changed in INSERT statement on MS-SQL-Server 【发布时间】:2014-03-10 16:37:26 【问题描述】:我的 MS-SQL-Server 2008R2 上有一个表,它本身有一个 nvarchar(50)
字段。
现在,当我使用 Server Management Studio 插入值时
INSERT INTO INFORMATIONS(SOME_TEXT) VALUES('finančné služby')
然后我立即选择值
SELECT SOME_TEXT FROM INFORMATIONS
我明白了
financné služby
所以č
确实被转换成一个普通的c
,而ž
处理得很好。
我在这里错过了什么?
排序规则设置为Latin1_General_CI_AS
,如果有帮助的话。
【问题讨论】:
你的意思是ž
处理得很好,对吧?
是的 - 谢谢,我更正了
【参考方案1】:
在插入时使用 N 为您的值添加前缀。
INSERT INTO INFORMATIONS(SOME_TEXT) VALUES(N'finančné služby')
CHECK SQL FIDDLE DEMO
【讨论】:
当我尝试这个时,我得到了同样的结果,它改变了字符(在 sql 2012 上) 这行得通,但为什么呢?我想得到一些解释 @Nikola 我认为 N 表示本地,因此支持这些字符。 在2008R2版本的服务器中,char
and varchar
保存非unicode字符,nchar
and nvarchar
保存unicode字符。字符串前面的“N”字符表明它必须被视为 unicode 字符。在最新版本的 MSSQL 中,检查文档,因为这四种类型的字段已经改变了行为。【参考方案2】:
如果您使用存储过程,则输入 'Nvarchar' 而不是 Varchar 用于存储 UTF-8 字符的特定文件
【讨论】:
【参考方案3】:用 with 字符串添加 N
insert into Item_Registration ([fırstlan_arabic],[second_turkish])values(N'قهوة شوكو',N'قهوة شوكو')
【讨论】:
以上是关于UTF-8 字符在 MS-SQL-Server 上的 INSERT 语句中发生更改的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上使用不属于 UTF-8 的字符创建文件名?