sqlserver2000 怪(100分)

  • 主题发起人 主题发起人 jakey_007
  • 开始时间 开始时间
J

jakey_007

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好:<br>&nbsp; &nbsp; 我碰到一个问题,我在数据库中建立了USER表,有name和password(char(2)).<br>我用此表来做登录.我给表添加了数据做登录测试,发现查询值怎么都不和我的EDIT.TEXT值相等.我该怎么解决?<br>&nbsp; &nbsp; 后来,我将两个值做showmessage,发现看到的信息是一样的啊,为什么?
 
注意大小写与空格。 char(2)类型的话,如果保存在表里的密码只有一位,数据库会自动补上一个空格的。ShowMessage的时候建议用 '"'+字段+'"'这样才可以看到是否一样。
 
数据库中 char 是代表char(10),是代表十个字符长度,还是十字节?<br>我该怎么比较,使得能相等?
 
数据库中 char 是代表char(10)? 没这样的说法吧.<br><br>char(1):是一个字符长度. char(2): 是两个字符长度: char(n): n个字符长度.
 
对于一般的数据库,char(1) 为8bit,char(2)=8bit x 2个 char(3)=8bit x 3个<br>...char(n)=8bit x n 个,varchar(1)=8bit,varchar(2)=8bit x 2个 ...<br>区别是varchar 在数据库服务器程序收到数据后,写入的时候会自动去掉前面的空格和后面的空格,比如<br>create table t1 ( f1 char(2),f2 varchar(2));<br>insert table t1 values('1 ','2 '); <br>得到的t1表,f1字段是'1'和一个后面的空格,f2字段只有'1'<br><br>如果做比较的话<br>select f1 from t1 where f1='1'; 是会得到空数据集的,改为<br>select f1 from t1 where f1=trim(edit_password.text));//delphi函数trim去掉前后空格<br><br>也可以更改表结构 f1 的类型为varchar,将自动去掉空格,如果你的正文里面必须存储前后空格,才需要定义为char,其他情况一般请使用varchar,当然,理论上char类型对于数据库来说处理要快一些,因为少了trim过程.<br><br>做登陆的时候可能用户会输入 英文大小写,空格等,最好提示密码不能有空格,将英文转换成大写/小写,所以完整的例句是<br>zqry1.sql.add('select top 1 id,name where upper(password)=''' + uppercase(trim(edt_password.text)) + '''');<br>其中upper是mssql 的转换到大写,uppercase是delphi的
 
不用char类型, 用vachar类型,因为你输入的字符不够的话,char会补成空格,造成不匹配
 
我也遇到过!<br>你不如把表名user改一下!
 
同意“幸福人生1”的观点。
 
使用CHAR有空格,表面上看是一样,实际上包含空格。<br>例如:<br>user&lt;&gt; &nbsp;user <br>因为有空格。建议使用varchar字段。
 
sql不区分大小写的。<br>注意空格还有中英文下的字符
 
为什么不用varchar?
 
很久没有做数据库方面的东西了,现在这些知识好像已经被我当成下饭菜了,谢谢大家了!<br>因为你们的帮助,我的小培训软件,一周内顺利做出来了!<br>真心谢谢大家!
 
多人接受答案了。
 

Similar threads

后退
顶部