温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - Check Constraint for Nullable Phone Numbers Column
mysql nullable sql check-constraints

sql - 检查可空电话号码列的约束

发布于 2020-03-30 21:35:40

限制在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)

查看更多

提问者
Akash Das
被浏览
14
GMB 2020-01-31 18:11

已经有很多评论指出,电话号码应以字符串而不是整数存储(典型的示例是以开头的电话号码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]+$')