Mysql选项 zeroDateTimeBehavior=convertToNull 在PHP中怎么设置?


项目初期mysql的时间字段使用了timestamp类型进行了存储,现在的问题是时间为0的都被转换成0000-00-00 00:00:00了,现在需要把时间为0的值转换成Null。
在java中,可以在mysql连接是,通过

   
  characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
 

这种方式指定,由于现在是用的php,想问一下,如何实现类似的功能,参数配置或者是sql语句处理都可以?急用

java php mysql

喵了个咪咪的 11 years, 12 months ago

1.在插入的时候判断:

   
  $time = 0;
  
$sql = "insert into date (name,date) values('111',if('{$time}','{$time}',null))";

这样会在插入 0 时 变为 null,或者插入 0 的时候 改为 now()

2.在查询数据判断:

   
  SELECT id, name,if(date = '0000-00-00 00:00:00', NULL , date ) AS date FROM `date`
 

这样就会将值为 0000-00-00 00:00:00 转换为 null

3 设置sql_model

   
  mysql_query("set sql_mode='no_zero_date'");
  
mysql_query("insert into date (name,date) values('xxx'0)");

如果在temestamp 列插入 0 会产生警告,但是数据还是会插入成功,如果插入 0 失败的话sql_model 为:set sql_mode='strict_all_tables,no_zero_date';

这样插入就会报如下错误:
ERROR 1292 (22007): Incorrect datetime value: '0' for column 'date' at row 1

Beats answered 11 years, 12 months ago

Your Answer