错误提示:Hibernate: insert into telecom.admins (name, loginname, loginpassword, phone, email, enrolldate) values (?, ?, ?, ?, ?, ?)Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [com.tantan.ssh.domain.Admin];SQL state [01004]; error code [0]; Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'enrolldate' at row 
SQL语句:
create table admins(
id int primary key auto_increment,
name varchar(20),
loginname varchar(20) unique,
loginpassword varchar(20),
phone varchar(20),
email varchar(30),
enrolldate date
)type=InnoDB default charset=utf8;
Java测试代码:
public void testSave(){
Admin admin=new Admin();
admin.setName("tantan");
admin.setLoginname("longling");
admin.setLoginpassword("longling");
admin.setEmail("[email protected]");
admin.setPhone("13594693567");
//字符编码问题
admin.setEnrolldate(new Date());

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
AdminDao dao=(AdminDao) context.getBean("AdminDao");
dao.save(admin);
}Admin.hbm.xml配置文件:<hibernate-mapping package="com.tantan.ssh.domain">
    <class name="Admin" table="admins" catalog="telecom">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" />
        </property>
        <property name="loginname" type="java.lang.String">
            <column name="loginname" length="20" unique="true" />
        </property>
        <property name="loginpassword" type="java.lang.String">
            <column name="loginpassword" length="20" />
        </property>
        <property name="phone" type="java.lang.String">
            <column name="phone" length="20" />
        </property>
        <property name="email" type="java.lang.String">
            <column name="email" length="30" />
        </property>
        <property name="enrolldate" type="java.util.Date">
            <column name="enrolldate" length="50" />
        </property>
    </class>
</hibernate-mapping>数据库字符集:mysql> show variables like '%char%';
+--------------------------+----------------------------------------------------
-----+
| Variable_name            | Value
     |
+--------------------------+----------------------------------------------------
-----+
| character_set_client     | utf8
     |
| character_set_connection | utf8
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binary
     |
| character_set_results    | utf8
     |
| character_set_server     | utf8
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+
8 rows in set (0.00 sec)我用的是MySQL 5.1,谁能帮我分析错在哪儿了?不胜感谢!

解决方案 »

  1.   

    数据库字段 enrolldate date    
    改为 enrolldate datetime 类型
      

  2.   

    Date类型换下java.sql.Date;
               
      

  3.   

    时间类型错误,java中的date需要转换处理,还有mysql中一般用datetime类型,只要你确认是时间字段出错。
      

  4.   

    插入日期的时候要用''单引号引起来的 
    Timestamp time = new Timestamp(new java.util.Date().getTime()); 
    String now = time.toString().substring(0, 19); 
      

  5.   

    util.Date对应的是DateTime类型。date是只有日期的
      

  6.   

    数据库字段 enrolldate date    
    改为 enrolldate datetime 类型
    试了,非常正确,可以解决问题。谢谢。
      

  7.   

    修改此字段sql 语句为    alter table admins change column enrolldate enrolldate datetime;