检查可空电话号码列的约束-MySQL
用于在MySQL服务器端检查电话号码是否仅包含数字以及是否包含十位数字的约束 我有下面的create table查询,其中检查可空电话号码列的约束-MySQL,mysql,sql,nullable,check-constraints,Mysql,Sql,Nullable,Check Constraints,用于在MySQL服务器端检查电话号码是否仅包含数字以及是否包含十位数字的约束 我有下面的create table查询,其中mobile是字段的名称,存储人们的电话号码:- CREATE TABLE `users` ( --Other columns `mobile` int UNSIGNED DEFAULT NULL, ) ENGINE=InnoDB; 如图所示,mobile列可以为空。因此,我不能应用直接长度检查约束和其他正则表达式约束。可行的检查约束(如果有)是什么 我假设电
mobile
是字段的名称,存储人们的电话号码:-
CREATE TABLE `users` (
--Other columns
`mobile` int UNSIGNED DEFAULT NULL,
) ENGINE=InnoDB;
如图所示,mobile
列可以为空。因此,我不能应用直接长度检查约束和其他正则表达式约束。可行的检查约束(如果有)是什么
我假设电话号码是一个整数。我已经阅读了制作varchar的建议
编辑-(注意版本)
在版本8.0之前,MySQL没有强制执行检查约束。它允许在CREATETABLE语句中写入它们,解析它们并忽略它们
以下是MySQL参考手册中的一些有用文档:
在MySQL 8.0.16之前,CREATETABLE只允许以下有限的
已分析并忽略的表检查约束语法版本:
支票(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]+$')
电话号码不是整数,因为它们不是“可数的”,它们不是你用来计算、求和、求平均值或将它们视为数字的数字。它们是数字序列,是一个字符串。有很多国家和地区使用以0开头的地区编号、国家编号、区号等,如果将其视为整数,则会有一些奇怪之处。请关注,删除不需要说明问题的列。那么,您希望在约束中实现什么逻辑?确保电话号码为空或有10位数字?
0123456789
是有效的电话号码。如果保存为整数,它将变成123456789
您不能使用类似约束移动\u约束检查(mobile为NULL或LEN(mobile)=10或…
?遗憾的是,检查约束不起作用。它接受少于10位的数字,甚至是用字母代替数字的字符串。