免费注册 查看新帖 |

Chinaunix

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

mysql 关于time类型请教大家~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-04 03:04 |只看该作者 |倒序浏览
# 创建一个my_time表
create table if not exists my_time
(
    id          integer not null,
    mytime      time    not null,
    primary key (id)
);
# 插入数据
insert into my_time values
(
    1,'12:30:30'
);
insert into my_time values
(
    2,'123030'
);
insert into my_time values
(
    3,'323030'
);

select * from my_time;
'1', '12:30:30'
'2', '12:30:30'
'3', '32:30:30'


====================================
问题:

'3', '32:30:30' 这个合法性如何保证?

这样插入是不允许的
insert into my_time values
(
    4,'42-32-30'
);

但是这样插入可以:
insert into my_time values
(
    3,'323030'
);


怎么样能够解决这个问题? 在创建表my_time的时候可以对    mytime      time    not null   做限制吗?

====================================

求大家指教~~

论坛徽章:
0
2 [报告]
发表于 2012-03-04 06:02 |只看该作者
回复 1# owinux


    1,首先了解一下mysql中的Time类型的格式(手册里有),'HHH:MM:SS'和‘HH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'
小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。
所以HHHMMSS类型的串或者数字,像你的323030插入后会变成32:30:30的原因。
   2,如果插入的格式不合法,像你的‘42-32-30’格式,在非严格模式下,mysql是允许操作,会有一个Warning,不过,插入后变成“00:00:00“,但如果在严格模式下,不允许插入并提示错。
如下面

表结构,
mysql> show create table Time_t\G;
*************************** 1. row ***************************
       Table: Time_t
Create Table: CREATE TABLE `time_t` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `my_time` time NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

当前模式:
mysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

插入分钟不规则的时间:
mysql> insert into Time_t values(null,'42:333:10');
Query OK, 1 row affected, 1 warning (0.00 sec)
允许插入,格式化为00:00:00
mysql> select * from Time_t;
+----+----------+
| id | my_time  |
+----+----------+
|  2 | 00:00:00 |
+----+----------+


(2)在严格模式下
mysql>
mysql> set @@sql_mode='STRICT_TRANS_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@sql_mode;
+---------------------+
| @@sql_mode          |
+---------------------+
| STRICT_TRANS_TABLES |
+---------------------+
1 row in set (0.00 sec)

mysql>

已不允许插入:

mysql>
mysql> insert into Time_t values(null,'42:233:10');
ERROR 1292 (22007): Incorrect time value: '42:233:10' for column 'my_time' at row 1
mysql>

说明:sql_mode根据你的系统来定,觉得这个时间值 的控制还是放在应用程序里,在插入之前进行处理好一些。




评分

参与人数 1可用积分 +2 收起 理由
ruochen + 2 赞一个!

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2012-03-04 23:57 |只看该作者
膜拜,谢谢指导!
真的很详细~~

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
4 [报告]
发表于 2012-03-06 17:27 |只看该作者
RogerZhuo 发表于 2012-03-04 06:02
回复 1# owinux



不错
一般遇到基础问题,先查官方文档
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP