如果列长度超过32766个字符,如何添加db约束以拒绝?

时间:2015-06-30 04:56:28

标签: mysql sql

TinyText - 255 chars
MediumText - 65535 chars

如果我给

ALTER TABLE attributes MODIFY stringValue text(32766) 

它对我不起作用。 它只需要默认的最大文本大小

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

1 个答案:

答案 0 :(得分:0)

这样做的简单方法是对字段stringvalue进行检查约束,以拒绝长度大于32766的任何内容,但遗憾的是MySQL不支持SQL检查约束。您可以出于兼容性原因在DDL查询中定义它们,但它们只是被忽略。

有一个简单的替代方案

您可以创建BEFORE INSERT和BEFORE UPDATE触发器,这些触发器会导致错误或在不满足数据要求时将字段设置为其默认值。

在MySQL 5.5之后进行BEFORE INSERT的示例

DELIMITER $$
CREATE TRIGGER `CheckLengthStringValue` BEFORE INSERT ON `attributes`
FOR EACH ROW
BEGIN
    IF CHAR_LENGTH( NEW.stringValue ) > 32766 THEN
        SIGNAL SQLSTATE '12345';
        SET MESSAGE_TEXT := 'check constraint on Attributes.stringValue failed';
    END IF;
END$$   
DELIMITER ;  

在MySQL 5.5之前,您必须导致错误,例如调用一个未定义的程序。