不区分吗?但是事实上证明下面的两个sql语句是不一样的,
SELECT name FROM person WHERE id=? and password=?
select name from perosn where id=? and password=?我用的是mysql5.0版本的数据库!!!我在MyEclipse下做了个增删改查的留言板,前提是用户登录,
登录时
我输入正确的用户名和密码,第二个sql语句在查询时怎么都通不过!!!!
于是我吧能改的地方都改了,还是不行,
最后我不得不怀疑是不是sql语句的问题,
果不其然啊!!!我都快疯了!!!!!问题竟然出在sql语句上!!!把关键字改为大写后就,输入正确的用户名和密码,就顺利通过验证,
上面两行sql语句就是我从代码中直接粘过来的!!!
我真的不知道这是为什么,难道是sql关键字区分大小写????恳请高手赐教!!!!

解决方案 »

  1.   

    mysql 
    不清楚
    mssql不区分
      

  2.   

    mssql也是可以分的 但是需要设置 
      

  3.   

    但从语句来讲,应该是没问题,可能是其他问题mysql> use mysql
    Database changed
    mysql> SELECT user FROM user WHERE user='root';
    +------+
    | user |
    +------+
    | root | 
    +------+
    1 row in set (0.00 sec)mysql> select user from user where user='root';
    +------+
    | user |
    +------+
    | root | 
    +------+
    1 row in set (0.00 sec)mysql> 
      

  4.   

    以上的测试环境是linux下的(version: 5.1.14),如果没有设置好linux下的对象名是区分大小写的
    windows下的应该不用再测试了吧
      

  5.   

    这个对楼主可能有用:1、linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写; iTbbo.com 2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写; www.iTbbo.com lower_case_table_names参数详解: www.iTbbo.com
    lower_case_table_names = 0 iTbbo.com 其中 0:区分大小写,1:不区分大小写 iTbbo.com MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: www.iTbbo.com
       1、数据库名与表名是严格区分大小写的; iTbbo.com    2、表的别名是严格区分大小写的; www.iTbbo.com    3、列名与列的别名在所有的情况下均是忽略大小写的; bbs.iTbbo.com
       4、变量名也是严格区分大小写的; iTbbo.com MySQL在Windows下都不区分大小写。 iTbbo.com3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种: bbs.iTbbo.comA、创建时设置:
    CREATE TABLE T(
    A VARCHAR(10) BINARY
    ); bbs.iTbbo.com B、使用alter修改:
    ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY; iTbbo.com C、mysql table editor中直接勾选BINARY项。 bbs.iTbbo.com
    原贴地址:http://www.itbbo.com/article/20090510/5830.shtml
      

  6.   

    SELECT name FROM person WHERE id=? and password=?
    select name from perosn where id=? and password=? 
    假设是区分的 那么第一句也不应该对啊 AND没有大写啊
      

  7.   

    是否区分大小写和校对规则有关,默认设的规则是大小写不敏感的。show create table如果看到collate是ci结尾,那么就是不区别的,如果cs或bin结尾,就是区别的。如果建表的时候选择的是区别大小写的规则而查询的时候又暂时不想区别,可以用类似WHERE column_name COLLATE latin1_general_ci = 'xxx'的写法改变查询使用的校对规则 
      

  8.   

    在windows中字段名称不区分
    在linux,unix中字段名称要区分的 
      

  9.   

    可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。
    这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。如果区分了mysql大小写的名字,在windows下面其实是会出问题的,因为虽然mysql区分了大小写,但是Windows本身并不支持文件名的大小写。即在windows下,如果你建立了一个大写字母的表名,再建立一个小写字母的表名,mysql并不会提示表已经存在,而是直接报错!
      

  10.   

    package com.wy.struts.impl;import java.sql.PreparedStatement;
    import java.sql.ResultSet;import com.wy.struts.dao.PersonDAO;
    import com.wy.struts.dbc.DataBaseConnection;
    import com.wy.struts.vo.Person;public class PersonDAOImpl implements PersonDAO {

    public boolean login(Person person) throws Exception{
    boolean flag = false;
    String sql = "SELECT name FROM person WHERE id=? and password=?";
    PreparedStatement pstmt = null;
    DataBaseConnection dbc = null ;
    dbc=new DataBaseConnection();
    try{
    pstmt = dbc.getConnection().prepareStatement(sql);
    pstmt.setString(1, person.getId());
    pstmt.setString(2,person.getPassword());
    ResultSet rs = pstmt.executeQuery();

    if(rs.next()){
    flag = true;
    person.setName(rs.getString(1));
    }
    rs.close();
    pstmt.close();
    }catch(Exception e){
    throw new Exception("操作出现错误!!!");
    }finally{
    dbc.close();
    }

    return flag;
    }}真的很无语,当我把sql里面的语句换成select name from perosn where id=? and password=? 时,它就是查不出来,无语,谁要想验证的话我把代码打包发给你,我的mysql是5.0版本的,MyEclipse是6.0.1版本的。tomcat是6.0.20免安装版本的!!!!