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