If a value is set to 0, it becomes impossible to then set it to a non-numeric String without changing it first to something numeric and non-zero.
First NamedValueSet::set(…) checks to see if the new value is different, via a call to var::VariantType_Int::equals (…). This converts the string to an int for comparison, decides they’re both the same (zero), and bails out.
Not the end of the world, but it’s an undocumented limitation that has had me scratching my head for a while! [I was testing something that I’d cobbled together quickly and was expecting to not work anyway… when the UI was showing strange results, I assumed it was my fault and changed loads of code, but it turns out my stuff was fine all along!]