检查可空电话号码的约束列-MySQL [重复]

问题描述 投票:0回答:1

约束检查MySQL服务器端电话号码是否仅包含数字以及是否包含十位数字。

我有以下创建表查询,其中mobile是该字段的名称,用于存储人员的电话号码:-

CREATE TABLE `users` (
  --Other columns

  `mobile` int UNSIGNED DEFAULT NULL, 

) ENGINE=InnoDB;

如所示,mobile列可以为NULL。因此,我不能应用直接长度检查约束和其他正则表达式约束。什么是可行的检查约束(如果有)?

P.S。 -我假设电话号码是整数。我已阅读将其设为varchar的建议。

编辑- (注意版本)

在8.0版之前,MySQL没有强制执行检查约束。它允许将它们写入CREATE TABLE语句中,对其进行解析并忽略它们。

这里是MySQL参考手册中的一些有用的文档:

在MySQL 8.0.16之前,CREATE TABLE仅允许以下限制表CHECK约束语法的版本,已解析并忽略:

检查(表达式)

mysql sql nullable check-constraints
1个回答
1
投票

已经广为注释,电话号码应以字符串而不是整数存储(典型的例子是以0开头的电话号码。]

您可以使用以下检查约束:

check(mobile is null or mobile regexp '^[0-9]{10}$')

这确保mobilenull或正好包含10位数字。

如果要确保电话号码包含only位数字,但不一定是10位数字,则可以将量词从10更改为+

check(mobile is null or mobile regexp '^[0-9]+$')
© www.soinside.com 2019 - 2024. All rights reserved.