今天写一个项目的用户登录部分 刚开始做,所以是数据库和程序一起写

一开始没注意 在定义表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的区别的更多相关文章

  1. SQLServer中char、varchar、nchar、nvarchar的区别

    http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...

  2. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  3. SQLServer中char、varchar、nchar、nvarchar比较

    转自:http://www.cnblogs.com/bluesky_blog/archive/2009/07/31/1535722.html 对于程序中的string型字段,SQLServer中有ch ...

  4. Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    1. char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达 到了 ...

  5. 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

    1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...

  6. mysql中char与varchar的区别

    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔 ...

  7. SQL Server中char与varchar数据类型区别

    在SQL Server中char类型的长度是不可变的,而varchar的长度是可变的 . 存入数据时: 如果数据类型为char时,当定义一个字段固定长度时,如果存进去数据长度小于char的长度,那么存 ...

  8. SQLServer中char、varchar、nchar、nvarchar的区别:

    (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度 ...

  9. 【字符串区别】SQLServer中char、varchar、nchar、nvarchar的区别:

    一.定义 char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度,存储ANSI字符 ...

随机推荐

  1. CentOS6.4安装包初识

    LiveCD 一般用来修复系统使用,有容量很小,不用安装,可以自启动等特性.bin DVD也具有同 样的功能,但是体积较大,所以会有live DVD. LiveDVD 与LiveCD 相同是不需要安装 ...

  2. HTML简明教程(一)

    HTML简明教程(一) 内容主体来自:W3School 一.HTML 简介 二.HTML 基础 三.HTML 元素 四.HTML 属性 五.HTML 标题 六.HTML 段落 七.HTML 文本格式化 ...

  3. Django项目--web聊天室

    需求 做一个web聊天室,主要练习前端ajax与后台的交互: 一对一聊天和群组聊天 添加用户为好友 搜索并添加群组 管理员可以审批用户加群请求,群管理员可以有多个,群管理员可以删除,添加禁言群友 与聊 ...

  4. SpringMVC基础——一个简单的例子

    一.导入 jar 包 二.配置 web.xml 文件 <servlet> <servlet-name>dispatcherServlet</servlet-name> ...

  5. Gradle学习系列之十——自定义Plugin(本系列完)

    在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone https://gi ...

  6. Activity按下2次退出和获取当前时间

    先看下onBackPressed和onKeyDown的区别 在Android上有两种方法来获取该按钮的事件 1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规 ...

  7. windows下react-native环境搭建

    首先不得不先吐槽一下自己,一个坑总是踩很多次,且乐此不疲. 咋办? 写博客记录记录呗. 零.记录的点 Java环境的下载与配置 Android环境的下载与配置 Node环境的下载与配置 创建第一个re ...

  8. ACdrea 1217---Cracking' RSA(高斯消元)

    ACdrea  1217---高斯消元 Description The following problem is somehow related to the final stage of many ...

  9. eclipse debug 快捷键

    简单的说下调试的快捷键: 1 F5:下一步,可以进入下一个函数栈 2 F6:当前函数的下一步,不会进入其他的函数. 3 F8:下一个断点. 4 也可以通过选中一个变量或者表达式,按ctrl+shift ...

  10. python学习笔记2(pycharm、数据类型)

    Pycharm 的使用 IDE(Integrated  Development  Environ ment) :集成开发环境 Vim  :经典的linux下的文本编辑器(菜鸟和大神喜欢使用) Emac ...