是否有任何关于实施数据源特定限制的建议做法?
例如,当保存String
超过255 or 65535 limit given in MySQL documentation时,有一个断言或抛出异常。或者这应该由数据源处理吗?
http://dev.mysql.com/doc/refman/5.0/en/char.html
VARCHAR列中的值是可变长度字符串。长度可以 在MySQL 5.0.3之前指定为0到255之间的值,0到 5.0.3及更高版本中的65,535。 a的有效最大长度 MySQL 5.0.3及更高版本中的VARCHAR受最大行大小的限制 (65,535字节,在所有列之间共享)和字符 设置使用。请参见第E.7.4节“表列计数和行的限制” 尺寸”。
答案 0 :(得分:1)
在您的数据访问层中,您应该执行的唯一验证是为特定数据库架构定义的验证。您可以将数据访问层视为模式的对象表示,尽可能合理地模仿模式的结构,数据类型和约束, 但不能再 即可。因此,考虑到以下简单的架构:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_name` VARCHAR(64) NOT NULL,
`passwordHash` VARCHAR(256) NOT NULL,
) ENGINE=InnoDB, DEFAULT CHARACTER SET utf8;
您将在数据访问层中验证:
userName
属性在保存之前设置,它是一个长度小于或等于64个字符的字符序列passwordHash
属性在保存之前设置,并且是长度小于或等于256个字符的字符序列但是,非常重要的是,您应该严格避免任何与仅绑定到特定数据库实现的检查。首先,您希望数据访问层与提供程序无关,其次,大多数特定于供应商的限制会在您尝试创建表时立即触发。