【问题标题】:UTF-8 character gets changed in INSERT statement on MS-SQL-ServerUTF-8 字符在 MS-SQL-Server 上的 INSERT 语句中发生更改
【发布时间】: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,如果有帮助的话。

【问题讨论】:

  • 你的意思是ž处理得很好,对吧?
  • 是的 - 谢谢,我更正了

标签: sql-server sql-server-2008 unicode utf-8


【解决方案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'قهوة شوكو')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多