如何在mysql中只允许字母数字值
Posted
技术标签:
【中文标题】如何在mysql中只允许字母数字值【英文标题】:how to Allow only alpha numeric values in mysql 【发布时间】:2019-07-25 07:26:45 【问题描述】:我有一张桌子
CREATE TABLE table_name
(
EmpId VARCHAR(50),
Name VARCHAR(100)
)
如何将 EmpId 列限制为由两个字母后跟 3-5 位数字组成?以下是所有有效值的示例:
ac236, ak2356, av23695, ak365
我尝试使用以下检查约束:
ALTER TABLE table_name
ADD CONSTRAINT ck_table_name CHECK (EmpId NOT LIKE'%[^a-zA-Z0-9 ]%')
但是,它允许所有字母和数字的组合,例如“23”和“时尚”:
INSERT INTO table_name
VALUES
('23', 'Test 2'),
('fabs', 'Test 2');
如果值违反格式,我希望查询失败并打印错误消息。例如,如果 'na23' 作为 EmpID
插入,mysql 可以说:
Empid 应该是 ab123/ab1234/a12345 格式
最初,我使用的是 MySQL 5.7.11-0ubuntu6-log(原来是 doesn't support CHECK
constraints),但已升级到 MySQL 8.0.17。
【问题讨论】:
你用的是什么版本的mysql? 5.7.11-0ubuntu6-log '在 MySQL 8.0.16 之前,CREATE TABLE 只允许以下有限版本的 table CHECK 约束语法,它被解析和忽略:' - dev.mysql.com/doc/refman/8.0/en/… 。在您的前端或触发器中执行此检查。 【参考方案1】:假设是 MySQL >=8.0.16
check(EmpId regexp '^[a-z]2[0-9]3,5$')
【讨论】:
数值也在插入 因为你使用的是低于 8.0.16 的版本,所以它不会工作 ,我已经升级到 8.0.17 它的工作,如何为此添加错误消息请让我知道 Empid 应该是 ab123/ab1234/a12345 格式 有点长,需要使用存储过程来捕捉错误。可能还有其他解决方案,但您不能只使用查询。那么你需要在哪里显示这些错误?如果它在应用程序端,您可以在那里进行。以上是关于如何在mysql中只允许字母数字值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 texbox 中只允许数字,但也允许使用法语键盘输入
如何在表格的一个列单元格中输入字母,而在另一列单元格中只输入数字?
如何在 swift 2.0 中只允许 UITextfield 中的某些数字集