VARCHAR(n)和VARCHAR(2^n)之间有什么优势吗?
在使用VARCHAR类型时,我们可以指定列的最大长度。有人问到,使用VARCHAR(n)和使用VARCHAR(2^n)有什么区别。
实际上,这两种方式没有优劣之分,都只是定义了存储字符串的最大长度。然而,有人对此持有不同的观点。他认为,列的长度是一个隐含的约束条件。通过向上取整,你放宽了约束条件,可能会对数据完整性产生影响。
举个例子,假设我们有一个用来存储美国邮政编码的列。邮政编码可以是5位或10位,所以varchar(10)是合理的选择。但是,如果你向上取整到最近的2的幂次方,你会得到一个varchar(16)。现在,你可以添加最多16个字符长度的数据。但是,11到16个字符之间的任何数据都是无效的,应该被拒绝存入数据库。
当然,如果你知道列的长度应该是多少,那么设置一个合理的最大长度是有意义的。然而,本文问到的是varchar(100)和varchar(128)之类的长度比较,所以可以相对安全地假设这些列设置了一个“安全”的长度,以防止截断错误等问题。