@@ -520,13 +520,25 @@ getColumnsForNewDataPart(
520520 }
521521 }
522522
523- SerializationInfo::Settings settings
523+ SerializationInfo::Settings settings;
524+ // / If mutations doesn't affect all columns we must use serialization info settings from source part,
525+ // / because data files of some columns might be copied without actual serialization, so changes in serialization
526+ // / settings will not be applied for them (for example, new serialization versions for data types).
527+ if (!affects_all_columns)
524528 {
525- (*source_part->storage .getSettings ())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
526- false ,
527- (*source_part->storage .getSettings ())[MergeTreeSetting::serialization_info_version],
528- (*source_part->storage .getSettings ())[MergeTreeSetting::string_serialization_version],
529- };
529+ settings = serialization_infos.getSettings ();
530+ }
531+ // / Otherwise use fresh settings from storage.
532+ else
533+ {
534+ settings = SerializationInfo::Settings
535+ {
536+ (*source_part->storage .getSettings ())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
537+ false ,
538+ (*source_part->storage .getSettings ())[MergeTreeSetting::serialization_info_version],
539+ (*source_part->storage .getSettings ())[MergeTreeSetting::string_serialization_version],
540+ };
541+ }
530542
531543 SerializationInfoByName new_serialization_infos (settings);
532544 for (const auto & [name, old_info] : serialization_infos)
0 commit comments