如何确保列值始终以大写形式添加?
How to make sure that the column value is always added in Uppercase?
我有一个现有的列 host
,并希望确保列值 host
始终添加到 Uppercase
。
我正在使用 Alter Table
命令如下:
ALTER TABLE `mydb`.`myTable`
CHANGE COLUMN `host` `host`
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) STORED;
这会导致错误,我无法更改该列。
Operation failed: There was an error while applying the SQL script to the database.
ERROR 1582: Incorrect parameter count in the call to native function 'UPPER'
SQL Statement:
ALTER TABLE mydb
.myTable
CHANGE COLUMN host
host
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) VIRTUAL
我想确保向前移动 host
中插入的值始终在 uppercase
中。
我想通过在运行时更新 uppercase
中的值来实现这一点。
我不想添加任何 constraint
,因为在 lowercase
.
中输入 host
值时会导致错误
不完全清楚您要做什么。
如果要在 table 上设置一个约束,只允许在 host
中使用大写字母,请使用检查约束:
alter table mytable
add constraint chk_host_upper
check (host rlike '^[A-Z]*$')
;
这可以防止将小写字符写入该列;尝试这样做会导致运行时错误。
另一方面,如果您想创建一个新列,即 returns 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;
我有一个现有的列 host
,并希望确保列值 host
始终添加到 Uppercase
。
我正在使用 Alter Table
命令如下:
ALTER TABLE `mydb`.`myTable`
CHANGE COLUMN `host` `host`
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) STORED;
这会导致错误,我无法更改该列。
Operation failed: There was an error while applying the SQL script to the database. ERROR 1582: Incorrect parameter count in the call to native function 'UPPER' SQL Statement: ALTER TABLE
mydb
.myTable
CHANGE COLUMNhost
host
VARCHAR(255) GENERATED ALWAYS AS (UPPER()) VIRTUAL
我想确保向前移动 host
中插入的值始终在 uppercase
中。
我想通过在运行时更新 uppercase
中的值来实现这一点。
我不想添加任何 constraint
,因为在 lowercase
.
host
值时会导致错误
不完全清楚您要做什么。
如果要在 table 上设置一个约束,只允许在 host
中使用大写字母,请使用检查约束:
alter table mytable
add constraint chk_host_upper
check (host rlike '^[A-Z]*$')
;
这可以防止将小写字符写入该列;尝试这样做会导致运行时错误。
另一方面,如果您想创建一个新列,即 returns 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;