SQL Server乱码问题

mademelaugh 2010-01-11 04:02:29
数据库字符集是“SQL_Latin1_General_CP1_CI_AS”;
有一个字段Descrition,字段类型是char(10);
插入中文内容时,显示为乱码。

我知道如果内容为常量时,前面加N如 N'内容' 可以插入成功,但是现在手头有一套程序是使用.NET程序的,SQL里面用的是变量,如 “insert table1(Description) values(@desc)”,程序里用的是SqlParameters赋值,这样插入的就是乱码了,请问怎么解决?(字符集和字段类型不可更改)
...全文
522 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
dragoniwn 2010-01-12
  • 打赏
  • 举报
回复
看看,学习下。
pumpkingirl 2010-01-12
  • 打赏
  • 举报
回复
帮顶,希望看到好的解决方案。

不过.net在传入字符的时候是可以添加N''的,实现起来不难,如果可以的话 也可以通知前端做一下处理
mademelaugh 2010-01-12
  • 打赏
  • 举报
回复
谢谢各位。除鸟更改字符集,包括SQL语句,字段类型都是不可更改的。我想通过程序实现类似 N'中文' 的效果。不知道各位有没有高招?
忆轩辕 2010-01-12
  • 打赏
  • 举报
回复
貌似只能修改字段的排序规则.......如果插入中文还是乱码,就要检查程序了
starseeker7 2010-01-12
  • 打赏
  • 举报
回复
围观,,等结果
DingZaL 2010-01-12
  • 打赏
  • 举报
回复
在传人数据网页没有设置中文(GB2312)
mademelaugh 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xman_78tom 的回复:]
转换为 varbinary 类型后插入。
SQL codeifobject_id('tab')isnotnulldroptable tab;createtable tab(cvarchar(10) collate SQL_Latin1_General_CP1_CI_AS);insertinto tabselectconvert(varbinary(10),'中文');selectconvert(varchar(10),convert(varbinary(10),c))from tab
[/Quote]

这样查出来的数据是"??????",跟直接插入是一样的。

我现在在.net中,先将string转换成Unicode的字节数组,再转换成GB2312,最后转换成Lartin字符串保存进去,程序读取出来就正常了。
但是有一个问题,如果直接用SQL读就会是一串乱码,用 convert(varchar(10),convert(varbinary(10),c)) 依然是乱码。

我想用SQL转换的时候可能也需要先转换到GB2312再转换回Unicode,不过我不知道用SQL如何实现。
GZFWJ 2010-01-11
  • 打赏
  • 举报
回复
用ALTER啊
suhy2009 2010-01-11
  • 打赏
  • 举报
回复
顶11楼啊。。。
--小F-- 2010-01-11
  • 打赏
  • 举报
回复
试试11楼的 用二进制试试
xman_78tom 2010-01-11
  • 打赏
  • 举报
回复
转换为 varbinary 类型后插入。

if object_id('tab') is not null
drop table tab;
create table tab(c varchar(10) collate SQL_Latin1_General_CP1_CI_AS);
insert into tab select convert(varbinary(10),'中文');

select convert(varchar(10),convert(varbinary(10),c)) from tab
mademelaugh 2010-01-11
  • 打赏
  • 举报
回复
我备份之后,更改了字符集为chinese_prc_ci_as,还是没用。字段类型是肯定不能更改的,那是应用程序定死的。
dawugui 2010-01-11
  • 打赏
  • 举报
回复
那就通知他们更改,要不然,没法搞.
mademelaugh 2010-01-11
  • 打赏
  • 举报
回复
因为字符串是变量,通过.NET程序传入的,好像做不到加N。
mademelaugh 2010-01-11
  • 打赏
  • 举报
回复
是一套软件,不是我自己定义的字段。
playwarcraft 2010-01-11
  • 打赏
  • 举报
回复
排序规则有可能受其他影响而不能更改,
但是char 为什么不能更改为 nchar ?
fanzhouqi 2010-01-11
  • 打赏
  • 举报
回复
修改排序规则
dawugui 2010-01-11
  • 打赏
  • 举报
回复
这个貌似得更改类型才行了.

就把字段更改为nchar(10),nvarchar(10)

插入数据前加 N
playwarcraft 2010-01-11
  • 打赏
  • 举报
回复
mademelaugh 2010-01-11
  • 打赏
  • 举报
回复
业务上规定不可更改。
加载更多回复(1)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧