限制在MySQL服务器端检查电话号码是否仅包含数字以及是否包含十位数。
我有以下创建表查询,其中mobile
字段的名称在哪里,用于存储人员的电话号码:-
CREATE TABLE `users` (
--Other columns
`mobile` int UNSIGNED DEFAULT NULL,
) ENGINE=InnoDB;
如所示,该mobile
列可以为NULL。因此,我不能应用直接长度检查约束和其他正则表达式约束。什么是可行的检查约束(如果有)?
PS-我假设电话号码是整数。我已阅读有关将其设为varchar的建议。
编辑- (照顾版本)
在8.0版之前,MySQL并未执行检查约束。它允许将它们写入CREATE TABLE语句中,对其进行解析并忽略它们。
这是《 MySQL参考手册》中的一些有用的文档:
在MySQL 8.0.16之前,CREATE TABLE仅允许表CHECK约束语法的以下受限版本,该语法已被解析和忽略:
检查(expr)
已经有很多评论指出,电话号码应以字符串而不是整数存储(典型的示例是以开头的电话号码0
)。
您可以使用以下检查约束:
check(mobile is null or mobile regexp '^[0-9]{10}$')
这确保了mobile
要么null
或恰好含有10个数字。
如果要确保电话号码仅包含数字,而不必包含10位数字,则可以将量词从更改10
为+
:
check(mobile is null or mobile regexp '^[0-9]+$')
可悲的是,检查约束不起作用。它接受少于10位数字的数字,甚至接受带有字母代替数字的字符串。