我正在尝试将项目从mssql移植到mysql,使用MySQL Workbench移植数据库 - 一切顺利。尝试插入数据时,我得到 SQLSTATE[22007]:无效的日期时间格式:1292 不正确的日期时间值:列"x"的日期时间值"06/18/2015 14:49:22"。在教义配置Entityname.orm.yml中,我有:
x:
type: datetime
gedmo:
timestampable:
on: create
在实体类中:
/**
* @var datetime $x
*/
private $x;
/**
* Set x
*
* @param datetime $x
*/
public function setX($x)
{
$this->x= $x;
}
导致错误的代码:
$em = $this->container->get('doctrine')->getEntityManager();
$new_entity = new EntityName();
$new_entity->setX(new DateTime());
$em->persist($new_entity );
$em->flush();
在_profiler我发现:插入entity_name (X) 值 (?)({"1":{"日期":"2015-06-18 14:49:22","timezone_type":3,"时区":"欧洲/布加勒斯特"}})
在此之后出现错误。
这在使用pdo_sqlsrv database_driver和 mssql 数据库之前有效。
编辑:有效的方法 - 运行设置sql_mode = NO_ENGINE_SUBSTITUTION; 设置全局sql_mode=NO_ENGINE_SUBSTITUTION; 在mysql数据库中 - 似乎错误的日期时间格式不是由symfony完成的。该错误是由 strict_trans_tables - SQL 模式更改 MySQL 执行 SQL 语句的方式引起的
在 MySQL 端做更好的方法?只需像这样设置您的字段:
date_x TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
然后:
$new_entity->setX(null);
您将在MySQL端获得当前日期:)
我认为您应该更改变量
/**
* @var DateTime $x
*/
private $x;
/**
* Set x
*
* @param datetime $x
*/
public function setX(DateTime $x)
{
$this->x= $x;
}
作为呼唤
$em = $this->container->get('doctrine')->getEntityManager();
$new_entity = new EntityName();
$new_entity ->setX(new DateTime());
$em->persist($new_entity );
$em->flush();