@@ -585,14 +585,26 @@ getColumnsForNewDataPart(
585585 }
586586 }
587587
588- SerializationInfo::Settings settings
588+ SerializationInfo::Settings settings;
589+ // / If mutations doesn't affect all columns we must use serialization info settings from source part,
590+ // / because data files of some columns might be copied without actual serialization, so changes in serialization
591+ // / settings will not be applied for them (for example, new serialization versions for data types).
592+ if (!affects_all_columns)
589593 {
590- (*source_part->storage .getSettings ())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
591- false ,
592- (*source_part->storage .getSettings ())[MergeTreeSetting::serialization_info_version],
593- (*source_part->storage .getSettings ())[MergeTreeSetting::string_serialization_version],
594- (*source_part->storage .getSettings ())[MergeTreeSetting::nullable_serialization_version],
595- };
594+ settings = serialization_infos.getSettings ();
595+ }
596+ // / Otherwise use fresh settings from storage.
597+ else
598+ {
599+ settings = SerializationInfo::Settings
600+ {
601+ (*source_part->storage .getSettings ())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
602+ false ,
603+ (*source_part->storage .getSettings ())[MergeTreeSetting::serialization_info_version],
604+ (*source_part->storage .getSettings ())[MergeTreeSetting::string_serialization_version],
605+ (*source_part->storage .getSettings ())[MergeTreeSetting::nullable_serialization_version],
606+ };
607+ }
596608
597609 SerializationInfoByName new_serialization_infos (settings);
598610 for (const auto & [name, old_info] : serialization_infos)
0 commit comments