如何解决如何确保列值始终以大写形式添加?
我有一个现有的列 host
,并希望确保列值 host
始终添加到 Uppercase
中。
我正在使用 Alter Table
命令,如下所示:
ALTER TABLE `mydb`.`myTable`
CHANGE COLUMN `host` `host`
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) STORED;
这导致了错误,我无法更改列。
操作失败:将 sql 脚本应用到数据库时出错。
错误 1582:调用本机函数“UPPER”时参数计数不正确
sql语句:
更改表 mydb
.myTable
更改列 host
host
VARCHAR(255) 始终作为 (UPPER()) 虚拟生成
我想确保向前移动 host
中插入的值始终在 uppercase
中。
我想通过在运行时更新 uppercase
中的值来实现这一点。
我不想添加任何 constraint
,因为在 host
中输入 lowercase
值时会导致错误。
解决方法
目前还不清楚您要做什么。
如果您想在表上设置只允许 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
。
最后:如果您想在 insert
上即时将输入值转换为大写,那么您需要一个触发器:
delimiter //
create trigger mytrigger
before insert on mytable
for each row
begin
set new.host = upper(new.host);
end
//
分隔符;
,您可以只分配 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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。