代码之家  ›  专栏  ›  技术社区  ›  Racoon

处理SQL查询中未正确显示的Unicode字符

  •  2
  • Racoon  · 技术社区  · 5 年前

    下面是SQL查询:

    DECLARE @objname nvarchar(255)
    set @objname='漢字'
    select @objname
    

    在Microsoft SQL Server Management Studio中运行此查询时,我得到以下信息:

    ??
    

    问题是:我的SQL查询中是否有需要更改的内容以获得结果中的_¼_…,或者这是代码页的问题,等等?

    3 回复  |  直到 5 年前
        1
  •  4
  •   Suraj Kumar zip    5 年前

    NVarchar 变量表示为 N'<Value> 所以它会是

    DECLARE @objname nvarchar(255)
    set @objname=N'漢字'
    select @objname
    

    现在输出将是 漢字 已经设定好了。运行以上代码。

        2
  •  7
  •   Pham X. Bach    5 年前

    你应该使用这个:

    DECLARE @objname nvarchar(255)
    set @objname = N'漢字'
    select @objname
    
        3
  •  4
  •   Jamie Pollard    5 年前

    在其他答案周围添加一些上下文:

    您需要使用 N prefix(n代表“national character”),因为您需要明确地说您正在传递一个包含unicode字符的字符串(如果您使用的是nchar、ntext等)。

    Microsoft's 描述是

    在unicode字符串常量前面加上字母n to 信号ucs-2或utf-16输入,取决于SC排序规则 使用或不使用。如果没有n前缀,字符串将转换为 数据库的默认代码页可能无法识别某些 字符。从SQL Server 2019预览版开始,当 使用启用的排序规则,默认代码页能够存储 Unicode UTF-8字符集。

    所以你的任务将根据其他答案 set @objname = N'漢字'

    您还应该知道在其他情况下使用前缀,例如在筛选时使用WHERE子句。 nvarchar 列,否则您可能会遇到一些问题,例如隐式转换导致的性能下降。