Sql Server 表中看不见的乱码

因为已经改好了,测试没有实际示例,仅操作模拟说明:


 

某表中有一个字段如:

charTest(col Nvarchar(50))

 

 

表中某列有符号'',但是在前端查询出来是时候出现很多这种乱码符号:

'?', '??', '???'

 

将字段拷贝到studio来看,没发现有问题,前后都没有空格,都是正确的:

​​​​​​【hh

​【dd

​【ee

​【aa

 

但是连续的拷贝到同一行时,发现前后出现空字符了:

​​​​​​【hh】​    【hh】​    【hh

 

然后直接更新,去掉所有空格:

update dbo.charTestset col=LTRIM(RTRIM(charTest))

 

不行,在试:

update dbo.charTestset col=REPLACE(col,' ','')

 

还是不行,前面的符号一直去不掉将中间的符号及其空格取出查看长度:


可以看到,SELECT LEN('')看起来没有长度,但是却存在4个长度!

 


在查询SELECT LEN('​​​​   ')中,拷贝符号''前面的空字符。用ascii码查询,发现对应编码为63,再转换为字符,发现竟然是问号'?'!这就是在前端看到的乱码,也就是说空的字符中存在乱码,但是数据库中没看到!查看数据库编码和列的属性都是正常的!



尝试转换字符看一下,都显示出来了:

SELECT col,CONVERT(VARCHAR(100),col)FROM dbo.charTest

 

hh  ?hh

dd  ??dd

ee  ???ee

aa  ????aa



最终的解决办法:

先转换字符,再替换问号为空字符,更新回表中!

update dbo.charTestset col=REPLACE(CONVERT(VARCHAR(100),col),'?','')

 

 

这些再查看,已经不存在看不见的字符了!

SELECT col,CONVERT(VARCHAR(100),col)

FROM dbo.charTest

where col <>CONVERT(VARCHAR(100),col)


这里再给个具体示例:

--	drop table #test
create table #test(col nvarchar(10),coll varchar(10))

insert into #test(col,coll)
select 'AA▪BB','Q★Q'
union all
select N'AA▪BB',N'Q★Q'

select * from #test


可以看到,如果类型为的nvarchar,插入表时必须显式转换nvarchar类型,否则保存的就是乱码.
与上面的实际数据库例子中不同的是:这个示例可以看出转换的乱码





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值