永发信息网

无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "SQL_Latin

答案:3  悬赏:20  手机版
解决时间 2021-11-17 11:10
  • 提问者网友:骨子里的高雅
  • 2021-11-17 04:01
无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "SQL_Latin
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-11-17 04:39
首先 模拟出一个 冲突的环境
CREATE TABLE test_one (
name nvarchar(10) ,
val INT
)

CREATE TABLE test_two (
name nvarchar(10) ,
val INT
)
go

ALTER TABLE test_one
ALTER COLUMN name NVARCHAr(10) COLLATE Latin1_General_CI_AS
go

ALTER TABLE test_two
ALTER COLUMN name NVARCHAr(10) COLLATE Chinese_Taiwan_Stroke_CI_AS
go

INSERT INTO test_one
SELECt '一', 111 UNIOn ALL
SELECT '二', 211 UNIOn ALL
SELECT '三', 311
go

INSERT INTO test_two
SELECT '一', 122 UNIOn ALL
SELECT '二', 222 UNIOn ALL
SELECT '三', 322
go

SELECT
test_one.name,
test_one.val,
test_two.val AS val2
FROM
test_one
JOIN test_two
ON (test_one.name = test_two.name)
go

消息 468,级别 16,状态 9,服务器 ZQWANG\SQLEXPRESS,第 9 行
无法解决 equal to 运算中 "Chinese_Taiwan_Stroke_CI_AS" 和 "Latin1_General_CI_AS"
之间的排序规则冲突。

冲突的解决
通过在关联的时候,强制指定排序规则,来避免冲突。

SELECt
test_one.name,
test_one.val,
test_two.val AS val2
FROM
test_one
JOIN test_two
ON (test_one.name = test_two.name
COLLATE Chinese_Taiwan_Stroke_CI_AS)
go

name val val2
---------- ----------- -----------
一 111 122
二 211 222
三 311 322

(3 行受影响)
全部回答
  • 1楼网友:千夜
  • 2021-11-17 07:11
排序规则不同而已 !一般是系统默认规则和该字段排序规则不同 到不一定是汉字。这个问题你得找会的人帮你远程
  • 2楼网友:拾荒鲤
  • 2021-11-17 06:13
向SQL Server 2005中插入中文数据后,查询出来的结果是???,根本就不显示中文一:关于数据库排序规则,将SQL_Latin1_General_CP1_CI_AS改成Chinese_PRC_CI_AS
,看一下是否可以解决这个问题,可惜我不能直接操作数据库,测试不了!
二:如果数据库上的排序规则不改,又想要正确显示出汉字的话,建议你全部使用Unicode类型字段,也就是那些以N开头的字段类型,比如nChar,
  nVarchar,才可以正确显示汉字。你上面使用的Char类型字段,在上面排序规则中,默认情况下应该是不支持汉字的。
三:如果你不想更改排序规则,又不想更改字段类型,那么就要更改你的SQL语句,对于所有的汉字,前面也要加上N才可以正确显示。具体的方法请参考下
面两条语句:
   查询:select * from tb_Cust where FirstName=N'汪'
   插入:insert tb_Cust(FirstName,LastName,Sex) values(N'汪',N'鑫昊',N'男')
这个方法绝对可以 我自己电脑就是出现这种问题的 谢谢~!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯