如何在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 中的某些数字集

如何使用 jQuery 在 HTML 输入框中只允许数字空间和分数(1 1/2)格式?

如何在react hooks中只允许输入数字?