【发布时间】:2015-11-21 20:04:52
【问题描述】:
我在 Firebird 2.5 中有一个充满数据的数据库。
我需要把字符集从UTF-8改成ISO8859_1,我试过了:
alter database default character set ISO8859_1 collation ES_ES
但它不起作用。如何转换字符集?
【问题讨论】:
标签: database firebird collation character-set
我在 Firebird 2.5 中有一个充满数据的数据库。
我需要把字符集从UTF-8改成ISO8859_1,我试过了:
alter database default character set ISO8859_1 collation ES_ES
但它不起作用。如何转换字符集?
【问题讨论】:
标签: database firebird collation character-set
更改默认字符集只会影响更改后创建的列(没有明确的字符集)。现有列不受影响,因为字符集是每个单独列的属性。这意味着您必须更改所有(相关)列。
有几个问题
NONE 或OCTETS 之外)时,才能正确更改字符集。
从NONE 或OCTETS 转换为另一个字符集可能会导致字符串转换错误,或者由于内容可能不符合您的期望而导致垃圾,或者可能导致目标字符集中的无效字节。要解决这些问题,您可以这样做:
UPDATE table SET newcolumn = oldcolumn(或者如果 oldcolumn 是 NONE 或 OCTETS:UPDATE table SET newcolumn = cast(cast(oldcolumn as VARCHAR(...) CHARACTER SET assumedcharset) as VARCHAR(...) CHARACTER SET targetcharset)
仅当您想要更改小型数据库(根据表、列和依赖项)或需要执行奇怪的转换时,第二个选项才更可取,否则我强烈建议使用数据泵解决方案。
【讨论】:
ALTER CHARACTER SET ISO8859_1
SET default COLLATION ES_ES;
脚本-执行这个到您想要更改的活动数据库!
【讨论】: