- cloudcone
-
向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"男")
这个方法绝对可以 我自己电脑就是出现这种问题的 谢谢~!
- LuckySXyd
-
首先 模拟出一个 冲突的环境x0dx0aCREATE TABLE test_one (x0dx0a name nvarchar(10) ,x0dx0a val INTx0dx0a)x0dx0ax0dx0aCREATE TABLE test_two (x0dx0a name nvarchar(10) ,x0dx0a val INTx0dx0a)x0dx0agox0dx0ax0dx0aALTER TABLE test_onex0dx0a ALTER COLUMN name NVARCHAR(10) COLLATE Latin1_General_CI_ASx0dx0agox0dx0ax0dx0aALTER TABLE test_twox0dx0a ALTER COLUMN name NVARCHAR(10) COLLATE Chinese_Taiwan_Stroke_CI_ASx0dx0agox0dx0ax0dx0aINSERT INTO test_one x0dx0a SELECT "一", 111 UNION ALLx0dx0a SELECT "二", 211 UNION ALLx0dx0a SELECT "三", 311x0dx0agox0dx0ax0dx0aINSERT INTO test_twox0dx0a SELECT "一", 122 UNION ALLx0dx0a SELECT "二", 222 UNION ALLx0dx0a SELECT "三", 322x0dx0agox0dx0ax0dx0aSELECTx0dx0a test_one.name,x0dx0a test_one.val,x0dx0a test_two.val AS val2x0dx0aFROMx0dx0a test_one x0dx0a JOIN test_twox0dx0a ON (test_one.name = test_two.name)x0dx0agox0dx0ax0dx0a消息 468,级别 16,状态 9,服务器 ZQWANGSQLEXPRESS,第 9 行x0dx0a无法解决 equal to 运算中 "Chinese_Taiwan_Stroke_CI_AS" 和 "Latin1_General_CI_AS"x0dx0a 之间的排序规则冲突。x0dx0ax0dx0a冲突的解决x0dx0a通过在关联的时候,强制指定排序规则,来避免冲突。x0dx0ax0dx0aSELECTx0dx0a test_one.name,x0dx0a test_one.val,x0dx0a test_two.val AS val2x0dx0aFROMx0dx0a test_one x0dx0a JOIN test_twox0dx0a ON (test_one.name = test_two.name x0dx0aCOLLATE Chinese_Taiwan_Stroke_CI_AS) x0dx0agox0dx0ax0dx0aname val val2x0dx0a---------- ----------- -----------x0dx0a一 111 122x0dx0a二 211 222x0dx0a三 311 322x0dx0ax0dx0a(3 行受影响)