SQLServer中char与varchar的区别
今天写一个项目的用户登录部分 刚开始做,所以是数据库和程序一起写
一开始没注意 在定义表T_Person时吧PerID和PerPwd的类型设定都是char(20)
并且写入了几个数据,诸如 id:01,pwd:01 等等这样的。
后来突然想起来这中间大有区别。赶紧分别改成nvarchar(50)和varchar(20)
但是在后来程序调试的时候 发现输入密码‘01’跟数据库读出的密码匹配不上
加断点看到数据库读出的是‘01 ’ 这样后面带空白的。
大吃一惊, 然后百度确认了好几遍,带var的会自动清后面的空白,不带的保留;带n的是unicode格式
以为.net这边的问题,查了几遍也没什么头绪。 在SQLServerManagement里面做查询,发现在这边返回的也是带空白的
瞬间感觉不会在爱了。。
于是又疯狂百度。 终于在一个比较隐蔽的帖子里看到一句 “char()改为varchar()时 空白不会自动删除” 才意识到自己错在哪了
我的把id和pwd的属性改了之后并没有意识到数据这个是时候是不会改变的。
因为对char(x)型数据来说,长度一定是x,用户没有空下的地方会被当做数据的一部分。
这个时候改变为varchar(x)类型,原数据会原封不动的保留下来。
nchar(x)和nvarchar(x)的情况类似。
值得注意的是,在改过之后 形如“select PerID from T_Person where PerID='01'”的语句是能匹配的
但返回的PerID依然是带空白的‘01 ’
这应该是sqlserver内部的某种机制。 具有一定的迷惑性。
---------------------------------------------------------------------------------------------------------------
我想这次的错误 说明一定要培养一种程序员的意识,就是让自己的思维能尽量的贴近计算机的思维。
在自然逻辑和程序逻辑间随意跳转全无漏洞就是程序员的一种境界吧。
SQLServer中char与varchar的区别的更多相关文章
- SQLServer中char、varchar、nchar、nvarchar的区别
http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...
- mysql中char与varchar的区别分析(补充一句,int和integer没区别)
转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...
- SQLServer中char、varchar、nchar、nvarchar比较
转自:http://www.cnblogs.com/bluesky_blog/archive/2009/07/31/1535722.html 对于程序中的string型字段,SQLServer中有ch ...
- Sqlserver中char,nchar,varchar与Nvarchar的区别分析
1. char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达 到了 ...
- 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别
1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...
- mysql中char与varchar的区别
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔 ...
- SQL Server中char与varchar数据类型区别
在SQL Server中char类型的长度是不可变的,而varchar的长度是可变的 . 存入数据时: 如果数据类型为char时,当定义一个字段固定长度时,如果存进去数据长度小于char的长度,那么存 ...
- SQLServer中char、varchar、nchar、nvarchar的区别:
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度 ...
- 【字符串区别】SQLServer中char、varchar、nchar、nvarchar的区别:
一.定义 char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符 ...
随机推荐
- nginx 更新提示端口占用的解决办法
最近更新ubuntu下的nginx,报了以下的错误, [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 可以看到,80 ...
- ios基础之入门(一)
最近找到了一个可以接触ios开发的职位,可以系统的学习和练习了.先从最基本的开始: 一.获取控件的两种方式 1)第一种,也是经常使用的一种,通过IBOutlet方式.直接按住control键,将控件和 ...
- [C#高级编程]基础知识摘要一
核心C#: 值类型存储在堆栈中,而引用类型存储在托管堆上. object类型可以用于两个目的: 可以使用object引用绑定任何子类型的对象 object类型执行许多一般用途的基本方法,包括Equal ...
- Sprint2演示分
团队贡献分: 朱杰:22 蔡京航:21 华子仪:20 甄增文:17
- 【C#】属性(Attribute)
如果程序员是猫,你是哪只猫? 这个是我一直都很喜欢的一个技术,不是很麻烦,也不是很难理解,和反射配合起来,只有你想不到没有做不到的用途(夸张了哈). 运用范围 程序集,模块,类型(类,结构,枚举,接口 ...
- Google判断广告点击作弊的几种方式和数据
Google判断广告点击作弊的几种方式和数据. 作弊广告点击的CTR数据太高网上有研究说如果CTR值大于了10%的站被干掉的可能性很高,他们会被单独拿出来分析.一般来说低于6-7%的CTR是安全红线 ...
- C#引用C++代码
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...
- Retention、Documented、Inherited三种注解
Retention注解 Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源 ...
- Afinal
1.注解功能 1)继承:FinalActivity ( 需要复制 afinal_0.5.1_bin.jar到lib下) 2)@ViewInject() public class AfinalActiv ...
- redis配置注意事项
最近在看redis方面的官方文档,redis-server的相关配置建议如下: 1.vm.overcommit_memory = 1 2.禁用linux内核特性transparent huge pag ...