Arduino考勤系统MySQL表改造:拆分日期与时间字段需求
解决方案:拆分MySQL考勤表的日期与时间字段
没问题,我帮你调整表结构,把原来的timestamp字段拆成独立的日期和时间字段,完全适配你的Arduino考勤系统需求。
修改后的表创建语句
CREATE TABLE `tbl_attendance` ( `att_id` int(11) NOT NULL AUTO_INCREMENT, -- 建议加上自增属性,不用手动维护ID `rfid_uid` varchar(255) NOT NULL, `punch_date` date NOT NULL, -- 单独存储考勤日期(格式:YYYY-MM-DD) `punch_time` time NOT NULL, -- 单独存储考勤时间(格式:HH:MM:SS) PRIMARY KEY (`att_id`) );
字段说明
punch_date:用date类型专门存储年-月-日,比timestamp更贴合你只存日期的需求,避免冗余的时间信息。punch_time:用time类型存储时:分:秒,精准拆分时间部分,方便后续按时间段统计考勤。
Arduino端数据插入要点
当你的Arduino读取到RFID卡片时,需要先获取当前的准确日期和时间(推荐用DS3231实时时钟模块,掉电也能保持时间;如果设备联网,也可以通过NTP同步网络时间),然后把日期和时间分别组装成符合MySQL要求的字符串:
- 日期格式必须是
YYYY-MM-DD(比如2024-05-20) - 时间格式必须是
HH:MM:SS(比如14:35:22)
然后构造插入SQL语句,示例如下:
INSERT INTO tbl_attendance (rfid_uid, punch_date, punch_time) VALUES ('1A2B3C4D', '2024-05-20', '14:35:22');
额外注意事项
- 如果用DS3231模块,初始化时要校准一次时间,确保后续读取的日期时间准确。
- 插入数据前一定要验证格式,比如日期不能是
2024/05/20这种斜杠分隔的,必须用横杠,否则MySQL会报错。 - 如果需要按日期+时间排序或者查询,直接用
punch_date和punch_time组合即可,效果和原来的timestamp一致,但结构更清晰。
内容的提问来源于stack exchange,提问作者Salman Mahmood
相关产品推荐
相关产品推荐

