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 语句中发生更改的主要内容,如果未能解决你的问题,请参考以下文章

Dbeaver 没有活动连接

在字符串上检测并转换utf-8

在 UTF-8 编码的字符串上使用 str_split

如何在 Windows 上使用不属于 UTF-8 的字符创建文件名?

emwin编译器把UTF-8编码的字符串识别出有换行符,在VS上开发emwin有些中文字符报错

emwin编译器把UTF-8编码的字符串识别出有换行符,在VS上开发emwin有些中文字符报错