在我的MySQL DB中,我有一个名为html_contents的字段,它包含要在网页中显示的所有html。显然,html可能是巨大的,而且肯定大于64 to,因此我决定使用LONGTEXT而不是VARCHAR。
当字段未设置或保留为空时,您会说将其设置为NULL或空字符串更好(别名对DB更有效)吗?
我读过这样的文章:何时使用空,何时使用空字符串?,但它通常讨论的是空字符串(可能是小字符串,而不是LONGTEXT)。
我想知道使用LONGTEXT是否是另一回事,使用NULL是否节省了大量的空间或执行时间,而不是留下空的LONGTEXT。
发布于 2013-03-14 06:50:57
为了使用或不使用这种价值,做出决定的一个好起点是MySQL官方手册。
简言之:
如果可能,将列声明为NULL。它通过更好地使用索引和消除测试每个值是否为NULL的开销,使SQL操作更快。您还节省了一些存储空间,每列一位。如果表中确实需要空值,请使用它们。只需避免默认设置,该设置允许每个列中的空值。
在SQL中,与任何其他值相比,空值都不为真,甚至是空值。包含NULL的表达式总是产生NULL值,除非在文档中为表达式中涉及的操作符和函数另有指示,当使用LOAD data INFILE读取数据时,空列或缺失列被更新为'‘。若要将空值加载到列中,请在数据文件中使用\N
发布于 2013-02-12 01:19:38
一般来说,这可能是一些特定的应用程序。真正的问题是,在我看来,空虚的价值有什么意义?请记住,选择会改变处理此值的SQL查询的语义,因此这是需要关注的地方。
作为一般规则,我更喜欢在值可能存在但不为已知的地方使用NULL,在假定我们知道值不适用的情况下使用空字符串。这使得许多事情都是理智的。例如,文本连接的null和not null产生null。如果我们想知道结果实际上是未知的,这是很有帮助的(有些情况是这样做的)。无论如何,如果某个值是未知的,并且我们希望使用一个空字符串作为占位符,那么我们必须显式地这样做。类似地,如果已知值不应用,我们可以按原样使用concat空字符串。
就空间而言,我认为你会发现语义的清晰程度远远超过了任何不同之处。在任何正常的db实现中,我都不会期望有巨大的空间差异。
发布于 2013-05-13 10:33:00
有一类问题,对于这些问题,空字符串是有用的,并且带有NULL的特殊含义。
空字符串是连接操作符下的标识。如果将空字符串与任何字符串连接起来,则会得到相同的字符串。如果应用程序以这种方式操作字符串,则保留空字符串用于与NULL不同的用途是有意义的。
为了比较起见,0是加法运算符下的标识。您不希望使用数字0来表示没有数字。这会把你的平均水平搞砸,只是为了开场白。
在可能的情况下避免空。必要时使用NULL。
https://dba.stackexchange.com/questions/28086
复制相似问题