在许多类型的SQL中,有三种方法可以在每次插入行时将列隐式设置为NULL.这些是:
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
即,第一个设置NULL标志(与NOT NULL相反),第二个将NULL标志保留为默认值,第三个设置NULL标志并将隐式值设置为NULL.
我听说在Microsoft SQL中,第二种变体并不完全相同,因为您还可以自定义表或模式的NULL标志的默认值.
但是对于MySQL,我不相信有这样的功能.此外,在MySQL中,与NOT NULL columns不同,如果没有显式值,则带有NULL标志的列在插入时总是隐式设置为NULL,即使启用了strict模式.因此,所有这些列声明都是相同的.
在我的MySQL脚本中,对于每个NOTNULL列,我都为我不希望在应用程序的某些插入中设置的列指定一个默认值,以避免在启用严格模式时出现任何问题.因此,我觉得如果我 Select 第三种变体,它会更加对称,即使它是最详细和明确的.像第三种变体这样的声明是常见的,还是第一种或第二种变体在其他脚本中出现得更频繁?
我考虑采用第二种方法,因为MySQL dump使用的是别名,但我不确定这是否是一个好主意,因为它还将整数文本作为字符串(单引号)转储到列声明的默认子句中.
这个问题可能看起来更像是一个观点,而不是一个有解决方案的问题,但我也想知道任何我不知道的潜在问题.将来我可能会 Select 从MySQL迁移到PostgreSQL,我也可以从这些专家那里得到一些建议,例如,PostgreSQL是否能像MS-SQL那样区分这些情况.如果我做了错误的假设,请纠正我.