First, when you use :Get() with a table, you don’t need to have {} inside, you can just leave it blank.
Second, instead of saving when you update it, you should save it when the player departs, when the server shuts down with game:BindToClose(), and every 100-200 seconds. Like:
local CharTable = {
HairColor = nil,
SkinColor = "Test"
}
local CharacterStorage = Ds2("Character", Player)
CharTable = CharacterStorage:Get() -- this loads the data
game.Players.PlayerRemoving:Connect(function()
CharacterStorage:Set(CharTable) -- this saves the data
end)
-- not in Studio so not gonna do BindToClose, but it is pretty easy to look up
while true do
wait(200)
CharacterStorage:Set(CharTable)
end