栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL插入DATETIME:使用ISO :: 8601格式是否安全?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL插入DATETIME:使用ISO :: 8601格式是否安全?

这个问题的简短答案似乎是“不,这并不安全”-这个结论是通过对MySQL Shell进行的一系列实验得出的。不过,仍然会希望有一个更“理论上”的答案。

显然,MySQL引擎(默认情况下)在它作为Datetime文字接受的方面是相当自由的,即使将其

sql_mode
设置为STRICT_ALL_TABLES:不仅接受各种分隔符,它们也可能有所不同:

INSERT INTO t(dt) VALUES('2012-01,03.04:05@06'); -- Query OK, 1 row affected

此外,如果字符串太短,则会用零填充…,但可能会令人惊讶:

INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what'sinserted

可悲的是,字符串太长(当最后一个可分析的数字后跟空格以外的其他内容时)在严格模式下将被视为无效值:

mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');ERROR 1292 (22007): Incorrect datetime value: '2012-06-27T05:25Z' for column 'dt' at row 1mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25');Query OK, 1 row affected (0.10 sec)

在传统模式下,解析更加轻松-但不够精确;此外,在严格模式下被认为不正确的字符串会发出“无声警告”,尽管操作会成功:

mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');Query OK, 1 row affected, 1 warning (0.10 sec)mysql> SHOW WARNINGS;+---------+------+---------------------------------------------+| Warning | 1264 | Out of range value for column 'dt' at row 1 |+---------+------+---------------------------------------------+mysql> SELECt dt FROM t;+---------------------+| dt       |+---------------------+| 2012-06-27 05:25:00 |+---------------------+

最重要的是,我们必须重写一些与DAL相关的代码,以便日期(和日期时间)始终以“规范化”形式发送到数据库。我想知道为什么要做的是我们,而不是Zend_Db开发人员。我想那是另一个故事。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号