我在firebird 2.5中有一个数据库填充数据。
我需要将字符集从UTF-8更改为ISO8859_1,我试过:
alter database default character set ISO8859_1 collation ES_ES
但它不起作用。谢谢你的帮助!
答案 0 :(得分:11)
更改默认字符集仅会影响更改后的已创建列(没有明确的字符集)。现有列不受影响,因为字符集是每个列的属性。这意味着您必须更改所有(相关)列。
有几个问题
NONE
或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)
如果您想要更改小型数据库(就表,列和依赖项而言)或者您需要执行奇怪的转换,则第二个选项更可取,否则我强烈建议使用数据泵解决方案。
答案 1 :(得分:0)
ALTER CHARACTER SET ISO8859_1
SET default COLLATION ES_ES;
脚本 - 将此操作执行到您要更改的活动数据库!