0

关于强制执行特定于数据源的限制,是否有任何推荐做法?

例如,当String保存超过MySQL 文档中给出的 255 或 65535 限制时,有一个断言或抛出一个异常。还是应该由数据源处理?

http://dev.mysql.com/doc/refman/5.0/en/char.html

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。请参见第 E.7.4 节,“表列数和行大小的限制”。

4

1 回答 1

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个字符的字符序列

但是,非常重要的是,您应该严格避免任何与特定数据库实现相关的检查。首先,您希望您的数据访问层与提供者无关,其次,大多数供应商特定的限制会在您尝试创建表的那一刻触发。

于 2013-03-23T22:19:22.603 回答