gpt4 book ai didi

delphi - 带有欧元符号的 UTF8、IBX 和 Firebird

转载 作者:行者123 更新时间:2023-12-01 22:43:33 25 4
gpt4 key购买 nike

我正在通过 Delphi 10.2 Tokyo 中的 IBX 组件连接到 Firebird。

我正在尝试通过以下代码连接到数据库:

IBDatabase.Connected := False;
IBDatabase.Params.Clear;
IBDatabase.DatabaseName := FDBFileName;
IBDatabase.Params.Values['user_name'] := FDBUserName;
IBDatabase.Params.Values['password'] := FDBPassword;
IBDatabase.Params.Values['lc_ctype'] := 'UTF8';
IBDatabase.Connected := True;

通过捕获连接期间的异常,我可以意识到如果数据库不存在,那么我使用以下代码创建它:

IBDatabase.Params.Clear;
IBDatabase.DatabaseName := FDBFileName;
IBDatabase.Params.Add('USER ''SYSDBA''');
IBDatabase.Params.Add('PASSWORD ''masterkey''');
IBDatabase.Params.Add('PAGE_SIZE 16384');
IBDatabase.Params.Add('DEFAULT CHARACTER SET UTF8');
IBDatabase.CreateDatabase;

上述操作创建数据库并使 TIBDatabase 组件保持与数据库的连接。

在本例中,我正在创建:

  • UTF8 字符串域
  • 包含 UTF8 字段的表

并在其中设置欧元符号()。

应用程序打开并且该字段可见。当我重新启动应用程序时,我不断收到错误消息:

No mapping for the Unicode character exists in the target multi-byte code page

最佳答案

我决定写这篇文章,以便分享我在近一周和不眠之夜后找到的解决方案。

该问题是由创建数据库代码产生的。由于参数与通常的连接参数不同,我将 DEFAULT CHARACTER SET UTF8 设置为 DEFAULT CHARACTER SET UTF8,相信我要在数据库中操作的任何 DDL 或语句都具有 UTF8 字符集。

这不是真的,数据库连接的行为与设置了 lc_ctype 参数的数据库连接不同。

为了解决这个问题,我只需关闭与数据库的连接,像第一次一样重置参数:

IBDatabase.Connected:= False;
IBDatabase.Params.Clear;
IBDatabase.DatabaseName:= FDBFileName;
IBDatabase.Params.Values['user_name']:= FDBUserName;
IBDatabase.Params.Values['password']:= FDBPassword;
IBDatabase.Params.Values['lc_ctype']:= 'UTF8';
IBDatabase.Connected:= True;

并执行所有操作。这样就可以正常工作了。

关于delphi - 带有欧元符号的 UTF8、IBX 和 Firebird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49723159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com