Mar*_*eel 11
更改默认字符集仅影响更改后创建的列(没有显式字符集).现有列不受影响,因为字符集是每个列的属性.这意味着您必须更改所有(相关)列.
有几个问题
NONEor之外OCTETS),则更改字符集只能正常工作.从NONE或转换OCTETS到另一个字符集可能会导致字符串转换错误或垃圾,因为内容可能与您的预期不符,或者可能是目标字符集中的无效字节.要解决这些问题,您可以:
UPDATE table SET newcolumn = oldcolumn(或者如果旧列是NONE或OCTETS:UPDATE table SET newcolumn = cast(cast(oldcolumn as VARCHAR(...) CHARACTER SET assumedcharset) as VARCHAR(...) CHARACTER SET targetcharset)如果您想要更改小型数据库(就表,列和依赖关系而言)或者您需要执行奇怪的转换,则第二个选项是首选,否则我强烈建议使用数据泵送解决方案.