Issue 12108 (https://github.com/rails/rails/issues/12108) was open to ask you to add test cases to deal with a specific case where change_column is called on a column which already has a default binding and :default option is not passed to the call.
I believe all AR adapters should behave exactly the same way and that it’s the implementation concern to execute the right actions on DB in this objective.
It looks like having an exhaustive test suite that can be run to test adapters that are developed separately such as Oracle or MS-SQL ones is the better way to do this and can be considered as some kind of reference specification; also it seems that this is somewhat partially done with (some ?) jruby-jdbc adapters.
This issue goes in this way, some adapters tries to keep the default value e.g. when changing from :string to :text type and some drop it whichever is the target type; I don’t know about the 3 “core” adapters, maybe they don’t behave the same already.
Another option would be to make the default option mandatory or maybe for specific scenarios changes only ?