【问题标题】:Ukrainian character change to question mark when insert to table插入表格时乌克兰字符变为问号
【发布时间】:2018-02-22 01:52:04
【问题描述】:

我有一个保存为包含乌克兰字符的 Unicode 文本的文件,它使用 SSIS 成功加载到临时表。

像这样:

"Колодки тормозные дисковые, комплект"
Колодки тормозные
"Колодки тормозные дисковые, комплект"
This is Test

但是当我将它移动到其他表时,它会变为:

"??????? ????????? ????????, ????????"
??????? ?????????
"??????? ????????? ????????, ????????"
This is Test

我使用的查询:

insert into finaltable
(
column1
)

select column1 from staging table.

排序规则:Latin1_General_CI_AS

我该如何纠正这个错误?

【问题讨论】:

    标签: sql sql-server ssis


    【解决方案1】:

    在这里您可以看到VARCHARNVARCHAR 数据类型之间的区别:

    DECLARE @Non_Unicode_Var VARCHAR (MAX) = 'Колодки тормозные дисковые, комплект';
    DECLARE @Unicode_Var NVARCHAR (MAX) = N'Колодки тормозные дисковые, комплект';
    
    SELECT @Non_Unicode_Var AS NonUnicodeColumn, @Unicode_Var AS UnicodeColumn;
    

    结果:

    +--------------------------------------+--------------------------------------+
    |           NonUnicodeColumn           |            UnicodeColumn             |
    +--------------------------------------+--------------------------------------+
    | ??????? ????????? ????????, ???????? | Колодки тормозные дисковые, комплект |
    +--------------------------------------+--------------------------------------+
    

    因此,您需要将数据类型更改为NVARCHAR 数据类型,然后将数据插入到表中。

    【讨论】:

      【解决方案2】:

      在表格中使用 nvarchar,当您在插入语句中键入字符串时,将 N 放在前面,例如 N'your string'。还可以考虑因排序问题而更改排序规则,请参阅this 问题。

      【讨论】:

      • 我喜欢这个。 N'[DESC]',但它在列中插入 DESC。
      • @RohiniMathur 是的,就是这样
      • 我已将数据类型更改为 nvarchar 和 N'DESC' 但不是列值,而是插入字符串 'DESC'。请提出建议。
      • 如果您在插入语句中指定一个字符串,您将插入该字符串。只有在向表中插入新值时才应使用 N'string'。将数据类型更改为 nvarchar 后,您应该尝试执行从临时表中选择值的原始查询
      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多