Database 将字符集从ISO8859_1转换为UTF8
我在firebird 2.5中有一个数据库,里面装满了数据。 我需要将字符集从UTF-8更改为ISO8859_1,我尝试了:Database 将字符集从ISO8859_1转换为UTF8,database,character,firebird,collation,Database,Character,Firebird,Collation,我在firebird 2.5中有一个数据库,里面装满了数据。 我需要将字符集从UTF-8更改为ISO8859_1,我尝试了: alter数据库默认字符集ISO8859\u 1排序规则ES\u ES 但它不起作用。谢谢你的帮助 ALTER CHARACTER SET ISO8859_1 SET default COLLATION ES_ES; 将此脚本执行到要更改的活动数据库 更改默认字符集只会影响更改后创建的列(没有显式字符集)。现有列不受影响,因为字符集是每个单独列的属性。这意味着您必须更改
alter数据库默认字符集ISO8859\u 1排序规则ES\u ES
但它不起作用。谢谢你的帮助
ALTER CHARACTER SET ISO8859_1
SET default COLLATION ES_ES;
将此脚本执行到要更改的活动数据库 更改默认字符集只会影响更改后创建的列(没有显式字符集)。现有列不受影响,因为字符集是每个单独列的属性。这意味着您必须更改所有(相关)列 有几个问题
这会影响性能,但也会导致运行时的字符串转换错误(例如,因为ISO-8859-1中不存在UTF-8字符)
NONE
或OCTETS
外)时,更改字符集才能正常工作。
从NONE
或OCTETS
转换到另一个字符集可能会导致字符串转换错误或垃圾,因为内容可能与您的期望不符,或者目标字符集中的字节可能无效- 创建一个新列
(或者如果oldcolumn是updatetable SET newcolumn=oldcolumn
或NONE
:OCTETS
updatetable SET newcolumn=cast(cast(oldcolumn作为VARCHAR(…)字符集assumedcharset)作为VARCHAR(…)字符集targetcharset)
- 删除旧列
- 重命名新列
- 修复任何其他依赖性问题(索引、触发器、外键等)
只有当您想要更改一个小型数据库(在表、列和依赖项方面)时,第二个选项才更可取或者您需要执行奇数转换,否则我强烈建议您使用数据泵解决方案。这不会更改列的字符集,这会更改指定字符集的默认排序规则。为了帮助您,我将尝试一下,并告诉您结论。这似乎行得通,非常感谢您的回答!您祝我生日快乐!!