**Describe the bug**
Here's my table:
```sql
CREATE TABLE table2
(
        EventDate Date,
        Id Int32,
        Value Int32
)
Engine = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY Id;
```

Modify default value (intentionally wrong):
```
>>> alter table table2 modify column Value default 'some_string';

ALTER TABLE table2
    MODIFY COLUMN `Value` DEFAULT 'some_string'

Ok.

0 rows in set. Elapsed: 0.007 sec. 
```

Now you obviously cannot insert anything to this table, because:
```
>>> insert into table2 (EventDate, Id) values (1234567890, 2)

INSERT INTO table2 (EventDate, Id) VALUES

Received exception from server (version 20.9.3):
Code: 6. DB::Exception: Received from localhost:9000. DB::Exception: Cannot parse string 'some_string' as Int32: syntax error at begin of string. Note: there are toInt32OrZero and toInt32OrNull functions, which returns zero/NULL instead of throwing exception.. 

1 rows in set. Elapsed: 0.002 sec. 
```

**How to reproduce**
* Which ClickHouse server version to use: 20.9.3
* Which interface to use, if matters: I used standard CLI

**Expected behavior**
Currently ClickHouse doesn't check types compability while setting a DEFAULT value for a column. Maybe ClickHouse should validate DEFAULT values for type compability?

{
        auto new_ttl_entry = TTLDescription::getTTLFromAST(ast, metadata_copy.columns, context, metadata_copy.primary_key);
        metadata_copy.column_ttls_by_name[name] = new_ttl_entry;
    }
    if (metadata_copy.table_ttl.definition_ast != nullptr)
        metadata.table_ttl = TTLTableDescription::getTTLForTableFromAST(
            metadata_copy.table_ttl.definition_ast, metadata_copy.columns, context, metadata_copy.primary_key);
    metadata = std::move(metadata_copy);
}
void AlterCommands::prepare(const StorageInMemoryMetadata & metadata)
{
    auto columns = metadata.columns;
    for (size_t i = 0; i < size(); ++i)
    {
        auto & command = (*this)[i];
        bool has_column = columns.has(command.column_name) || columns.hasNested(command.column_name);
        if (command.type == AlterCommand::MODIFY_COLUMN)
        {
            if (!has_column && command.if_exists)
                command.ignore = true;
            if (has_column)
            {
                auto column_from_table = columns.get(command.column_name);
                if (command.data_type && !command.default_expression && column_from_table.default_desc.expression)
                {
                    command.default_kind = column_from_table.default_desc.kind;
                    command.default_expression = column_from_table.default_desc.expression;
                }
            }
        }