问题
项目需求,需要把日志文件通过logstash实时存储到MySQL数据库中,但是日志文件中的时间格式是字符串,例如:2022-06-18T10:33:12.230689+0800
,在MySQL中,我照例使用了DATETIME类型存储该时间,但是在我使用STR_TO_DATE(str, format)
对字符串进行转化,其中
-- input:
-- str:2022-06-18T10:33:12.230689+0800
-- format:%Y-%m-%dT%H:%m:%s.%f+0800
STR_TO_DATE(str, '%Y-%m-%dT%H:%m:%s.%f+0800');
但是就在我进行测试时,发现MySQL报错,Incorrect DateTime
原因
但是,本身的格式转换并没有出现问题,于是我在本地MySQL进行了测试,发现问题在于精度
MySQL自5.6版本开始DATETIME类型支持毫秒精度,但是需要进行设置,默认的毫秒精度为零
测试
放几张测试图
- 建表:表内分别设置默认精度,3位,6位时间字段进行测试
- 存储:对同一个时间分别存入三个字段中
- 结果
结论
建表时每个字段的数据类型选择一定要考虑总体框架和实际开发的使用场景