MySQL列的大写约束

5

我有一个名为UserID的列,类型为varchar(10)。是否有一种方法可以限制该列仅接受大写字符?


在触发器中添加 BEFORE INSERT 和 BEFORE UPDATE 触发器,并将其转换为正确的大小写(或引发错误)。 - Vatev
4个回答

4
上面Ankit Saha的回答并不完全正确。这个会设置一个约束,强制一个字段全部为大写:
CREATE TABLE my_table (
    uc_field VARCHAR(30),
    CONSTRAINT force_upper_case CHECK(BINARY uc_field = UPPER(uc_field))
);

如果你想强制小写,只需将 UPPER() 更改为 LOWER()

在 mariadb 10.2 上进行了测试,但应该适用于支持 CHECK() 约束的任何版本的 mysql/mariadb。


完美运行! - David Refoua

2

您问道:

有没有一种方法可以强制 [MySQL] 列仅接受大写字符?

没有约束设置可以实现这一点。

@vatev建议使用一对触发器来更改数据以使其大写。这可能有效,但会带来性能成本。

如果使用不区分大小写的排序规则,MySQL将把您的列视为单个大小写。大多数需要这种限制的开发人员使用UPDATE和INSERT语句来强制执行这些限制。

INSERT INTO tab (col) VALUES (UPPER('data-item')) 

会做到位。

0

创建表时,请设置以下约束条件:

create table table_name(column_name check(column_name=upper(column_name)));

这将设置一个约束条件,只接受大写数据。


由于@lfjeff的回答,这个不起作用。 - David Refoua

-1

尝试使用以下查询:

UPDATE my_table SET my_column = UPPER(my_column)

祝一切顺利。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接