Во многих разновидностях 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 столбцы с флагом NULL, в отличие от столбцов NOT NULL, всегда неявно устанавливаются в NULL при вставке, если нет явного значения, даже если включен строгий режим. Таким образом, все эти объявления столбцов остаются идентичными.
В моем сценарии MySQL для каждого столбца NOT NULL я указываю значение DEFAULT для столбцов, которые я не собираюсь устанавливать в некоторых вставках в моем приложении, чтобы избежать каких-либо проблем, если бы я включил строгий режим. Таким образом, я чувствую, что было бы более симметрично, если бы я выбрал третий вариант, даже если он является самым многословным и явным. Являются ли объявления, подобные третьему варианту, общими, или первый или второй вариант встречаются чаще в сценариях других пользователей?
Я рассматривал возможность использования второго подхода, поскольку этот псевдоним используется в дампе MySQL, но я не уверен, что это хорошая идея, поскольку он также сбрасывает целочисленные литералы в виде строк (одинарных кавычек) в стандартных предложениях объявлений столбцов.
Этот вопрос может показаться большим мнением, чем тот, у которого есть решение, но я также хочу знать о любых потенциальных ошибках, о которых я не знаю. Я могу выбрать миграцию с MySQL на PostgreSQL в будущем, и я также мог бы воспользоваться некоторыми советами этих экспертов, например, если PostgreSQL различает эти случаи, как MS-SQL. Поправь меня, если я ошибаюсь, если я сделал какие-то неверные предположения.