字段从char转换到nvarchar

来自外太空的你 2014-07-11 12:17:15
字段从char转换到nvarchar会不会出现查询不正确,或者其他一些想不到得错误,谢谢
...全文
475 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 16 楼 DBA_Huangzj 的回复:
空格在前面当然不会自动截掉

但那不也是浪费存储空间吗?
请看图片,转换后的
  • 打赏
  • 举报
回复
引用 11 楼 fengqingtao2008 的回复:
[quote=引用 8 楼 u010526292 的回复:] [quote=引用 5 楼 fengqingtao2008 的回复:] 肯定会有的,如二楼说的,二进制截断字符串,如果char类型为空值的话,要用SQL trim()函数过滤空格。 具体用法参考这个 sql server数据库中char,varchar,nvarchar字段的区别 希望对你有所帮助!
select * from ComputerInfo where Computer like N‘%成都%’ 从char该到nvarchar之后是不是查询之后是不是都要加N[/quote] 如果以Unicode 字符串常数中 SQL Server 时您必须在前面所有的 Unicode 字符串以大写的字母 N,你这个应该不加!另外可以 用ltrim(rtrim(Express))取出前后的空格字符!个人拙见,供参考![/quote] 我现在担心如果将char转换成nvarchar之后,编写的程序,会不会因为这个N的缘故,无法查到数据
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
空格在前面当然不会自动截掉
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
把数据用这类写法移到一个新表,然后重命名新表 select ltrim(rtrim(原数据))
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
怎么发现存在的?
点击数据,光标前面有空格 而把空格去处之后,在点击数据是没有的
SQL77 2014-07-11
  • 打赏
  • 举报
回复
转换是不会丢掉东西的。要不然就像数据转换一样,如果丢掉就要报错或者提示你有可能丢失数据。 但是像字符变量一样赋值的时候 自动 截断的情况 ,SQL却没报错。自行截断的。这点感觉不太好。
SQL77 2014-07-11
  • 打赏
  • 举报
回复
空格依然存储,但是比较会去掉尾部空格
无涯大者 2014-07-11
  • 打赏
  • 举报
回复
引用 8 楼 u010526292 的回复:
[quote=引用 5 楼 fengqingtao2008 的回复:] 肯定会有的,如二楼说的,二进制截断字符串,如果char类型为空值的话,要用SQL trim()函数过滤空格。 具体用法参考这个 sql server数据库中char,varchar,nvarchar字段的区别 希望对你有所帮助!
select * from ComputerInfo where Computer like N‘%成都%’ 从char该到nvarchar之后是不是查询之后是不是都要加N[/quote] 如果以Unicode 字符串常数中 SQL Server 时您必须在前面所有的 Unicode 字符串以大写的字母 N,你这个应该不加!另外可以 用ltrim(rtrim(Express))取出前后的空格字符!个人拙见,供参考!
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
怎么发现存在的?
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
定长转变长多余的空格不存储
但是我转换后,发现空格依然存在啊,我用的是sql2000
  • 打赏
  • 举报
回复
引用 5 楼 fengqingtao2008 的回复:
肯定会有的,如二楼说的,二进制截断字符串,如果char类型为空值的话,要用SQL trim()函数过滤空格。 具体用法参考这个 sql server数据库中char,varchar,nvarchar字段的区别 希望对你有所帮助!
select * from ComputerInfo where Computer like N‘%成都%’ 从char该到nvarchar之后是不是查询之后是不是都要加N
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
定长转变长多余的空格不存储
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
最起码nvarchar的长度不要少于原有数据,不然 消息 8152,级别 16,状态 4,第 7 行 将截断字符串或二进制数据。 语句已终止。
在请问,我原本是char的类型改为nvarchar之后,本来char的字段中多余的空格如何去处? 除了 用循环之外,还有没有什么更好的方法 还望指点,谢谢
无涯大者 2014-07-11
  • 打赏
  • 举报
回复
肯定会有的,如二楼说的,二进制截断字符串,如果char类型为空值的话,要用SQL trim()函数过滤空格。 具体用法参考这个 sql server数据库中char,varchar,nvarchar字段的区别 希望对你有所帮助!
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
有这样的可能,但是不是总会发生,如果你改了类型,最好全面检查一下数据
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
最起码nvarchar的长度不要少于原有数据,不然 消息 8152,级别 16,状态 4,第 7 行 将截断字符串或二进制数据。 语句已终止。
那么会不会出现 查询不到相关信息的情况, 例如我在网上看到原有的字段 是char 改为 nvarchar之后 要在查询语句加N
發糞塗牆 2014-07-11
  • 打赏
  • 举报
回复
最起码nvarchar的长度不要少于原有数据,不然 消息 8152,级别 16,状态 4,第 7 行 将截断字符串或二进制数据。 语句已终止。
flyfly2008 2014-07-11
  • 打赏
  • 举报
回复
楼上讲得很好,学习路过
飃颻 2014-07-11
  • 打赏
  • 举报
回复
char是固定长度的字符串类型,优点是长度一致、编程简单,缺点是存储空间的浪费程度由数据长度是否统一来决定; varchar是变动长度的字符串类型,优点是节省存储空间,与数据长度一致性无关,缺点是编程时需要考虑字符串变长的特点; nvarchar是采用Unicode编码变长的字符串类型,优点是支持操作系统默认字符集之外的Unicode字符,缺点是每个字符必须占用两个字节,包括原来的ASCII单字节码。

34,575

社区成员

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

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