我将字符串写入数据库,数据库中的字符串后自动添加了很多空格,这是为什么呢?我的环境是:windows xp;eclipse+tomcat5.5;微软的SQL SEVER 2000;
链接数据库时,我用odbc在自己电脑上建了一个数据源,采用了JdbcToOdbc的驱动。我在数据库中设置的字符串的字段类型是Varchar,这里会不会与我设置的字段类型有关呢?我检查过写入数据库之前的字符串,它后面没有空格啊。为什么写入后就有自动加了空格嫩,请高手指教一下啊。

解决方案 »

  1.   

    如果你的字段是varchar
    与你数据库设置的字段类型无关.和odbc的设置有关,上次也有人问过.忘记怎么解决的了.
      

  2.   

    关注。觉得JdbcToOdbc这块的问题
      

  3.   

    我本来想把代码放上去的,但代码太多了,涉及到多个java类。但我试过,varchar字段里的确有空格,我用string类的trim()方法去掉从数据库中获
    取出来的字符串前后空格,它的后部就没空格了。顺便说一个事情:
    我的数据库里是这样设置的:字段 userName varchar;字段   password varchar;
    还有一些其它字段。这里我写入数据库的字符串后面都自动加了空格。当我使用下
    面的方法getUserByUsername()时,照道理说应该返回null(参数当中的name怎么会
    和数据库中有空格的字符串相等!!!!)
    ,但出乎我的意料,它返回的是一个user类,
    真不知道SQL SEVER 2000里面是怎执行sql语句的???
    /** 此方法通过用户名获取该用户的记录,
     * 返回值是个User类对象,
     * 如果在数据库中找到该条记录,就返回一个User类的对象,
     * 如果找不到,或者发生异常,则返回null
     */
    public User getUserByName(String name){    //通过用户名获取该用户的所有信息
    ResultSet rs = null;
    PreparedStatement pst=null;
    String sql = "select * from t_user where userName=?";
    try {
    try{
    pst = conn.prepareStatement(sql);
    pst.setString(1, name);
    //System.out.print(name);
    rs = pst.executeQuery();
    if (rs.next()) {
    User user = new User();
    user.setUserName(rs.getString("userName"));
    user.setPassword(rs.getString("password"));
    user.setAnotherName(rs.getString("anotherName"));
    user.setMobilephone(rs.getString("mobilephone"));
    user.setPhone(rs.getString("phone"));
    return user;
    } else {
    return null;     
    }
    }finally{
    pst.close();
    } } catch (SQLException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    return null;
    } }
    我再问大家一句,varchar后面真的不会自动加空格么????
      

  4.   

    如果你字段那里没有设置默认值,如'abc ',直接增加前后不带空格的字符串就不会自动增加。
      

  5.   

    恩,知道了。
    我也确定我放入数据库的字符串后面是没加空格的,那就是连接数据库的驱动程序做了某些操作吧。猜测:java当中的字符是UTF-16编码,转到数据库的varchar存储时,代码转换时多出了空格
      

  6.   

    不知道为什么,我手工在字段中输入值,最后用程序判断,还是有空格,并且用length判断,数据库返回的值长度为设置字段时的长度。但是用SQL语句判断却行。我晕倒