Chinaunix

标题: date字段是不是很特殊的? [打印本页]

作者: ultralqxq    时间: 2006-04-26 14:18
标题: date字段是不是很特殊的?
请问,为什么我set names 'gb2312'后,插入用户注册数据中的生日(date)字段必须要填写才能成功插入啊?而以前用lanti1就不会有这样的情况。

具体情况:
以前数据库编码都是lanti1,而现在我把它换成了gb2312。所以在SQL类里加了一句 set names 'gb2312';可是却发生以上这种情况。。怎么解决??
作者: ultralqxq    时间: 2006-04-26 14:30
代码:
$birthday=$_POST['b_year'].$_POST['b_month'].$_POST['b_day'];

$sqlstring="INSERT INTO `tab_user` set `username`= '".$uname."',";
$sqlstring.="`birthday` ='".$birthday."',";
$sqlstring.="`introduction` ='".$_POST['introduction']."'";
mysql_query($sqlstring) or die("SQL语句出错!");

感觉是$birthday=$_POST['b_year'].$_POST['b_month'].$_POST['b_day'];这句的问题,接收过来的只是字符串数据,赋值给$birthday后,应该还是字符串型。。
当它有具体值时,date会自动转换其类型为date。。而当它为空时。。情况就不同了。。

请问我分析的对吗??要怎么改呢???
作者: ultralqxq    时间: 2006-04-26 14:40
当 MySQL 遇到一个日期或时间类型的值超出范围或对该类型是一个不合法的值时(查看这个章节的开头部分),它会将该类型的值变换到“零”值。

为什么到了我这里就失效啦!!!!
作者: dataclose1    时间: 2006-04-26 14:42
$birthday=$_POST['b_year'].$_POST['b_month'].$_POST['b_day'];

输出的是 日期型的吗?

如果  你数据库里的 birthday 是 date 类型的话~

那行~~  $birthday 就必须应该是  “2006-01-01” 这个样子!
作者: ultralqxq    时间: 2006-04-26 14:53
奇怪的是以前用lanti1时,都不会有任何问题。可能是因为lanti1不检查数据就直接插入了吧。。呵呵

我也猜到是那个类型的问题。。而且当$birthday有值时,也是正常的(自动被转化成合法的类型了)。。就是当$birthday为空时才报错。
目前临时解决办法是if(empty($birthday)){$birthday='0000-00-00';}

但很想知道,怎么转化$birthday类型呢?
PS:改成$birthday=date($_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day']);
或$birthday=$_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day'];

还是报错!

[ 本帖最后由 ultralqxq 于 2006-4-26 14:55 编辑 ]
作者: dataclose1    时间: 2006-04-26 15:27
我觉得应该 $birthday=$_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day'];
这样子!

还有~报的什么错? 你贴出来!
作者: jy_nim    时间: 2006-04-26 15:53
好像直接用INT(11)来存储日期要方便点

在MSSQL里面用char(11)存储
作者: ultralqxq    时间: 2006-04-26 16:21
我觉得应该 $birthday=$_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day'];
这样子!

还有~报的什么错? 你贴出来!



#1292 - Incorrect date value: '--' for column 'birthday' at row 1

我多试了几次。。发现。。如果省略对它赋值,也不会出错,赋NULL值也不会出错。只有set $birthday='';才会提示上面的错误!
PS:当$birthday=$_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day'];时,不填时,$birthday='--';一看就知道有问题了啊~~呵呵

[ 本帖最后由 ultralqxq 于 2006-4-26 16:23 编辑 ]
作者: seaheart    时间: 2006-04-26 17:29
必须要填写 是因为这个字段的属性是not null.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2