免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2227 | 回复: 8
打印 上一主题 下一主题

date字段是不是很特殊的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-26 14:18 |只看该作者 |倒序浏览
请问,为什么我set names 'gb2312'后,插入用户注册数据中的生日(date)字段必须要填写才能成功插入啊?而以前用lanti1就不会有这样的情况。

具体情况:
以前数据库编码都是lanti1,而现在我把它换成了gb2312。所以在SQL类里加了一句 set names 'gb2312';可是却发生以上这种情况。。怎么解决??

论坛徽章:
0
2 [报告]
发表于 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。。而当它为空时。。情况就不同了。。

请问我分析的对吗??要怎么改呢???

论坛徽章:
0
3 [报告]
发表于 2006-04-26 14:40 |只看该作者
当 MySQL 遇到一个日期或时间类型的值超出范围或对该类型是一个不合法的值时(查看这个章节的开头部分),它会将该类型的值变换到“零”值。

为什么到了我这里就失效啦!!!!

论坛徽章:
0
4 [报告]
发表于 2006-04-26 14:42 |只看该作者
$birthday=$_POST['b_year'].$_POST['b_month'].$_POST['b_day'];

输出的是 日期型的吗?

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

那行~~  $birthday 就必须应该是  “2006-01-01” 这个样子!

论坛徽章:
0
5 [报告]
发表于 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 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-04-26 15:27 |只看该作者
我觉得应该 $birthday=$_POST['b_year'].'-'.$_POST['b_month'].'-'.$_POST['b_day'];
这样子!

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

论坛徽章:
0
7 [报告]
发表于 2006-04-26 15:53 |只看该作者
好像直接用INT(11)来存储日期要方便点

在MSSQL里面用char(11)存储

论坛徽章:
0
8 [报告]
发表于 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 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-04-26 17:29 |只看该作者
必须要填写 是因为这个字段的属性是not null.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP