【问题标题】:sql server 2005 concatenate nvarchar, results sometimes in strange characterssql server 2005 连接 nvarchar,有时会导致奇怪的字符
【发布时间】:2014-02-28 07:43:26
【问题描述】:

在 sql server 2005 中将两个带有“-”的 nvarchar(20) 列连接到一个 nvarchar(100) 时,我遇到了一个非常奇怪的行为。 这是简化的更新声明:

UPDATE tbl3
SET tbl3.col1 = t1.col1+' - '+t2.col1
FROM 
    tbl1 AS t1
INNER JOIN
    tbl2 AS t2 ON 1=1
INNER JOIN
    tbl3 AS t3
ON
    t3.col2 = t1.col2+t2.col2
;   

以下是一些记录的结果(单引号不在列中,仅代表它的开始和结束位置):

tbl1.col1:'Saídos'

tbl2.col1.1stRow:'Salário rendim.mens.'

tbl2.col1.2ndRow:'Assalariados por mês'

第一次更新:

tbl3.col1.1stRow:'Salário rendim.mens.'

tbl3.col1.2ndRow:'Saídos - Assalariados por mês'

第二次更新:

tbl3.col1.1stRow:'Saídos - Salário rendim.mens'

tbl3.col1.2ndRow:'Saídos - Assalariados por mê'

第三次更新:

tbl3.col1.1stRow:'Saídos - Salário rendim.mens'

tbl3.col1.2ndRow:'Saídos - Assalariados por mê'

第四次更新:

tbl3.col1.1stRow:'Saídos - Salário rendim.mens.'

tbl3.col1.2ndRow:'Saídos - Assalariados por mê'

如前所述,tbl1.col1 和 tbl2.col1 是 nvarchar(20),tbl3.col1 是 nvarchar(100) 在表设计器中,所有 3 列的 Collat​​ion 设置为 ,并且数据库 Collat​​ion 设置为 Latin1_General_CI_AS。

欢迎任何帮助或疑难解答,谢谢!

【问题讨论】:

  • 我不知道是什么原因造成的,但如果可以的话,请使用 Unicode 字符类型。像这样的问题就会消失。
  • 正如你所建议的,我在所有表中都更改为 nvarchar,仍然得到相同的奇怪行为......
  • 那么,我能想到的唯一原因是“令人惊讶”的数据(尽管我想不出任何可能发生这种情况的方式)。尝试在 sqlfiddle.com 上创建一个可执行的 repo,以便我们可以使用它。我刚试过SELECT N'Salário rendim.mens.' + N'Saídos - Assalariados por mês',效果很好。
  • 其他原因:仍然存在排序规则问题或涉及非 unicode 数据类型而您没有注意到它。创建一个 repo(例如,通过编写表格脚本)可以让您找到问题。
  • 我以前从未见过此类错误。有趣又讨厌。

标签: sql-server sql-server-2005 concatenation collation nvarchar


【解决方案1】:

知道了,

' - ' 需要是 unicode,例如 N' - '

UPDATE tbl3
SET tbl3.col1 = t1.col1+N' - '+t2.col1
FROM 
    tbl1 AS t1
INNER JOIN
    tbl2 AS t2 ON 1=1
INNER JOIN
    tbl3 AS t3
ON
    t3.col2 = t1.col2+t2.col2
;   

如果列是 varchar(不是 unicode),这也有效,但我建议始终使用 nvarchar。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多