微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL要求最小长度

如何解决MySQL要求最小长度

我使用的是MysqL Workbench,我制作了一个名为“ organizations”的表,并希望阻止任何向少于5个字母的列添加值的尝试。 列名是“ namee”。 我做到了,但出现错误

ALTER TABLE organizations
ADD CONSTRAINT MINIMO CHECK (LENGTH(namee) >= 5);

错误

Error Code: 3814. An expression of a check constraint 'MINIMO' contains disallowed function: `LEN`.

解决方法

这似乎很奇怪。这行得通吗?

ALTER TABLE organizations
    ADD CONSTRAINT MINIMO CHECK (LENGTH(namee) LIKE '_____');

我怀疑LENGTH()是不确定的;我不确定为什么会这样。

,

至少在较旧的版本中,并且您未指定哪个版本,需要使用触发器来检查长度。

CREATE TRIGGER t1 BEFORE INSERT ON organizations
 FOR EACH ROW BEGIN

   DECLARE numLength INT;
   SET numLength = (SELECT LENGTH(NEW. namee));

   IF (numLength > 30) THEN
     SET NEW.col = 1/0;
   END IF;

END;
,

请考虑以下内容...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (my_string VARCHAR(20) NOT NULL);

SET @string = 'red';

INSERT INTO my_table SELECT @string FROM (SELECT 1)x WHERE CHAR_LENGTH(@string) >= 5;

SET @string = 'orange';

INSERT INTO my_table SELECT @string FROM (SELECT 1)x WHERE CHAR_LENGTH(@string) >= 5;

SELECT * FROM my_table;
+-----------+
| my_string |
+-----------+
| orange    |
+-----------+
,

我不确定您使用的是哪个版本,但是在MYSQL 8.x上对我来说效果很好

create table test_check(name varchar(10));

ALTER TABLE test_check
ADD CONSTRAINT MINIMO CHECK (LENGTH(name) >= 5);
,

基于您共享的错误消息,您显然试图使用函数LEN()。 MySQL中不存在该名称的内置函数。

使用MySQL 8.0.21进行测试,如果尝试使用LEN()或任何其他不存在的函数,我可以重现您显示的错误。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.21    |
+-----------+
1 row in set (0.00 sec)

mysql> ALTER TABLE organizations ADD CONSTRAINT MINIMO CHECK (LEN(namee) >= 5);
ERROR 3814 (HY000): An expression of a check constraint 'MINIMO' contains disallowed function: `LEN`.

mysql> ALTER TABLE organizations ADD CONSTRAINT MINIMO CHECK (BOGUS(namee) >= 5);
ERROR 3814 (HY000): An expression of a check constraint 'MINIMO' contains disallowed function: `BOGUS`.

如果您试图定义一个名为LEN()的存储函数并使用它,则应阅读https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

不允许使用存储的函数和用户定义的函数。

但是LENGTH()可以正常工作。顺便说一句,我建议使用CHAR_LENGTH(),以便将多字节字符计为一个字符。

mysql> ALTER TABLE organizations ADD CONSTRAINT MINIMO CHECK (CHAR_LENGTH(namee) >= 5);
Query OK,1 row affected (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。