【问题标题】:How to make sure that the column value is always added in Uppercase?如何确保列值始终以大写形式添加?
【发布时间】:2020-12-28 16:19:33
【问题描述】:

我有一个现有的列 host,并希望确保始终将列值 host 添加到 Uppercase 中。

我正在使用Alter Table 命令如下:

ALTER TABLE `mydb`.`myTable` 
CHANGE COLUMN `host` `host`
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) STORED;

这会导致错误,我无法更改该列。

操作失败:将 SQL 脚本应用到数据库时出错。 ERROR 1582:调用本机函数“UPPER”时的参数计数不正确 SQL 语句: 更改表mydb.myTable 更改列 host host VARCHAR(255) 始终作为 (UPPER()) 虚拟生成

我想确保在host 中插入的值始终在uppercase 中。 我想通过在运行时更新uppercase 中的值来实现这一点。 我不想添加任何constraint,因为在lowercase 中输入host 值时会导致错误。

【问题讨论】:

  • 有关系吗?
  • 添加一个触发器,其中 UPPERs
  • 我想确保在host 中插入的值始终在uppercase 中。我想通过在运行时更新uppercase 中的值来实现这一点。我不想添加任何constraint,因为在lowercase 中输入host 值时会导致错误。
  • 你看我的评论了吗?

标签: mysql sql calculated-columns alter-table


【解决方案1】:

不完全清楚你要做什么。

如果您想在表上设置一个约束,只允许host 中的大写字母,请使用检查约束:

alter table mytable
    add constraint chk_host_upper
    check (host rlike '^[A-Z]*$')
;

这可以防止将小写字符写入列;尝试这样做会导致运行时错误。

另一方面,如果您想创建一个新列,它返回大写值 host,而不管实际的列代码是什么:

alter table mytable
     add column host_upper varchar(50)  -- same as the original column
     as (upper(host))
;

有了这个设置,您可以在需要大写值时查询新列host_upper


最后:如果你想在inserts 上即时将输入值转换为大写,那么你需要一个触发器:

delimiter //

create trigger mytrigger
before insert on mytable
for each row
begin
    set new.host = upper(new.host);
end
//

分隔符;

【讨论】:

  • 我想确保在host 中插入的值始终在uppercase 中。我想通过在运行时更新uppercase 中的值来实现这一点。我不想添加任何constraint,因为在lowercase 中输入host 值时会导致错误。
  • @meallhour:这听起来像是一个触发器。查看我的更新。
【解决方案2】:

您可以将host 列指定为不区分大小写的排序规则:

ALTER TABLE mydb.myTable MODIFY host VARCHAR(255)
CHARACTER SET latin1
COLLATE latin1_swedish_ci;

现在插入时使用的host 的大小写无关紧要,您可以使用任何大小写与此列进行比较。如果您仍然需要查看host 为大写,那么只需使用UPPER()

SELECT UPPER(host) AS host_upper
FROM myTable;

【讨论】:

  • 我想确保在host 中插入的值始终在uppercase 中。我想通过在运行时更新uppercase 中的值来实现这一点。我不想添加任何constraint,因为在lowercase 中输入host 值时会导致错误。
  • ...我的回答解决了您的问题,因为它完全消除了您管理 host 案例的需要。
猜你喜欢
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多