我有Firebird
数据库和charset WIN1251
。数据库已有几个表。现在我想将默认排序规则更改为WIN1251_UA
。所以我执行了这个陈述:
ALTER CHARACTER SET WIN1251 SET DEFAULT COLLATION WIN1251_UA
根据上面this link查询更改数据库的默认排序规则。
现在我遇到了问题:对于所有表格,所有varchar
字段仍然有排序WIN1251
。如何更改所有现有表的默认排序规则?
其他信息:Firebird 2.5
已使用。
答案 0 :(得分:0)
您无法更改列的排序规则。您需要创建一个新列并复制数据,或者使用正确的DDL创建一个新的空数据库,并使用数据库泵将数据从一个数据库移动到另一个数据库。
另见docs。
答案 1 :(得分:0)
如何使用IBExpert及其ibeblock来创建数据库的sql转储。当你创建它时只需更改整理。
这种ibeblock的一个例子:
execute ibeblock
as
begin
cbb = 'execute ibeblock (
LogLine variant)
as
begin
ibec_progress(LogLine);
end';
DB = ibec_CreateConnection(__ctInterBase,
'DBName="127.0.0.1:mydatabase";
ClientLib=gds32.dll;
User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');
try
ibec_ExtractMetadata(DB, 'c:\test\db.sql',
'GenerateCreate;
IncludePassword;
SetGenerators;
ExtractDescriptions;
UseComment;
ExtractBLOBs;
DateFormat=YYYY-MM-DD;
DateTimeFormat=YYYY-MM-DD HH:NN:SS;
DataTables=MY_TABLE1,MY_TABLE2',
cbb);
finally
ibec_CloseConnection(DB);
end;
end;
答案 2 :(得分:0)
最后我找到了解决方案。例如,如果我想更改所有表中所有txt
字段的排序规则。我可以使用此查询执行此操作:
update RDB$RELATION_FIELDS set
RDB$COLLATION_ID = 2
where rdb$view_context is null and rdb$field_name='TXT';
当然,如果某个表中的txt
字段是完整性约束的一部分,则上述查询将失败。
通过这种方式,我可以更改sort
子句中使用的其他字段。