public void setString(int parameterIndex,String x)throws SQLException 
    Sets the designated parameter to a Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.
    Parameters:parameterIndex - the first parameter is 1, the second is 2, ...x - the parameter value
    Throws:SQLException - if a database access error occurs
Please attetion: "depending on the argument's size relative to the driver's limits on VARCHAR values"

解决方案 »

  1.   

    你理解错了,那句话的意思是说具体使用VARCHAR还是LONGVARCHAR依赖于String的长度是否超过Driver对于Varchar长度的限制,并不是说String的长度依赖于Driver。
      

  2.   

    我怀疑是不是你字段看错啦 是char 而不是varchar ,char会自动加的
      

  3.   

    呵呵.楼主你理解错我的意思了...
    我个人认为楼主的疑惑是因为Driver对String也好Varchar也罢.都是有长度限制的!所以你的东东出来的和进去的不一样啊!
      

  4.   

    我已开始也以为是这个问题,检查之后确定是Varchar了
    而且同样的数据库我用Statement直接insert或者用ResultSet
    的InsertRow都没有这个问题,只是PreparedStatement才会出这个问题
    如果Varchar和Char结果都一样的话用Varchar还不如Char呢
      

  5.   

    不会呀。我没有这样的问题。是不是jdbcodbc的问题,试试用jdbc连。
      

  6.   

    to tiger_wkh52741(走走.跑跑.瞧瞧!) :
    对于Varchar的长度限制,我的理解是VARCHAR类型的数据的最大长度不能超过某个上限,
    否则就会使用LONGVARCHAR。
    我最大的疑惑是为什么Statement和ResultSet都能保证存储的和取出的字符串一致。
    用Prepared就是图它快的,如果必须补空格的话取的时候就要trim(),万一忘了就会出错
    而且还要花空间存储那些空格……
    有没有让PreparedStatement不补空格的方法呢?
      

  7.   

    谢谢 forjie(风信子) !!!
    果然是jdbcodbc,果然是它,换了驱动就好了