sql server 2005连接nvarchar,结果有时会出现奇怪的字符

时间:2014-02-04 11:09:36

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

在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áriorendim.mens。'

tbl2.col1.2ndRow :'Assalariadospormês'

第一次更新:

tbl3.col1.1stRow :'Saláriorendim.mens。'

tbl3.col1.2ndRow :'Saídos - Assalariadospormês'

第二次加注:

tbl3.col1.1stRow :'Saídos - Salñdel rendim.mens'

tbl3.col1.2ndRow :'Saídos - Assalariadospormê'

3 upate:

tbl3.col1.1stRow :'Saídos - Salñdel rendim.mens'

tbl3.col1.2ndRow :'Saídos - Assalariadospormê'

第4次更新:

tbl3.col1.1stRow :'Saídos - Saláriorendim.mens。'

tbl3.col1.2ndRow :'Saídos - Assalariadospormê'

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

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

1 个答案:

答案 0 :(得分:0)

知道了,

' - '需要是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。