有没有人开始制作Unicode应用程序或将现有应用程序转换为Unicode?
你如何调整Firebird以解决最少的问题,尤其是CHARSET属性?
遇到任何问题吗?还有什么别的我应该知道的吗?
我只是在准备自己,以便在跳到Unicode列车之前获得更少的惊喜.
我们使用firebird作为我们的数据库.我们如何在数据库中存储货币符号.我们应该使用哪个字符集或通常最佳做法?
例如,存储"$"或"¥"直接显示,但更复杂的符号在数据库表中没有正确显示,即"₡"不会存储在数据库中.
什么被普遍认为是这种事情的"最佳实践".
编辑 -
让我指出我们使用的语言是C#.我怀疑UTF8会是答案,但我们如何将字符存储在数据库中,我们是使用Unicode,Hex还是Decimal等效的....还是我们只是使用字符?
我们可以bitwise and在不使用UDF的情况下执行firebird程序吗?是否有一个内置函数或有一种方法可以使用标准内置命令获得相同的结果?
我也尝试了http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-bin_and.html(BIN_AND)但我需要一些没有UDF的实现.
例如:(3 & 3) returns 3在SQL中但不在firebird中(firebird 2.1).
我正在使用ibpp库编写自己的Firebird数据库浏览器.有没有办法可以使用SQL语句获取表定义?
是否可以在Firebird中重命名表,或者我应该创建一个新表,然后使用insert移动数据?
我使用Delphi 2010,Firebird 2.5.2,IBExpress组件.
数据库字符集是UTF8.在db-connection UTF8中.
数据库:
var
Database: TIBDatabase;
begin
...
Database.params.Clear;
Database.params.Add('user ''SYSDBA'' password ''masterkey'' ');
Database.params.Add('page_size 16384');
Database.params.Add('default character set UTF8');
Run Code Online (Sandbox Code Playgroud)
表:
CREATE TABLE NEW_TABLE (
NEW_FIELD VARCHAR(255)
);
Run Code Online (Sandbox Code Playgroud)
连接代码:
Database.params.Clear;
Database.params.Add('user_name=SYSDBA');
Database.params.Add('password=masterke');
Database.params.Add('sql_role_name=UTF8');
Database.Open;
Run Code Online (Sandbox Code Playgroud)
插入代码:
var
IBSQL: TIBSQL;
begin
IBSQL := TIBSQL.Create(nil);
try
IBSQL.Database := db;
IBSQL.Transaction := tr
IBSQL.SQL.Text := 'insert into NEW_TABLE (NEW_FIELD) values (:param)';
IBSQL.params[0].Value := 'Ãabc©'; // unsupported symbols :(
if not IBSQL.Transaction.Active then
IBSQL.Transaction.StartTransaction;
IBSQL.ExecQuery; // "Malformed string" exception here
if IBSQL.Transaction.Active …Run Code Online (Sandbox Code Playgroud) 我正在使用Firebird 2.1.
这里有张桌子: IDs, Labels
同一ID可以有多个标签:
10 Peach
10 Pear
10 Apple
11 Apple
12 Pear
13 Peach
13 Apple
Run Code Online (Sandbox Code Playgroud)
假设我有一组标签,即:( Apple,Pear,Peach).
如何编写单个选择以返回在给定集合中包含所有标签的所有ID?我最好在用逗号分隔的字符串中指定集合,例如:('Apple','Pear','Peach') - >这应该返回ID = 10.
谢谢!
在这一点上,下面引用的摘录似乎是矛盾的.
(我认为它们都很老了,第二个是从2004年开始,第一个提到Borland所以一定也要老了,所以也许它们已经过时了.)
第一个似乎表明提交保留使事务处于活动状态,因此将坚持OIT.
第二,如果我理解它意味着通过提交保留,现有的TID被标记为已提交,并且事务保持活动但具有新的TID,因此不会粘贴OIT.这第二个摘录与Interbase有关,我不知道这是否解释了看似矛盾的问题.
Firebird文档提取:
使用Firebird(和InterBase),Commit Retaining会使事务无限期地保持有趣.垃圾收集有效地停止在"标准"Borland RAD工具数据库应用程序和任何其他使用Commit Retaining的应用程序上.
Embarcadero Blog post extract
读取已提交,读写:
如果您不时保留提交,此事务可以永久运行而不会对性能产生负面影响.
我正在尝试使用.NET Firebird Provider连接到嵌入式FB 3.0.1服务器.
据我所知,(也写在这里(第6页)),没有更多的fbclient.dll\fbembed.dll,但单个客户端fbclient.dll用于远程和嵌入式访问.
但是当我调用FBConnection.Open()时,我得到一个System.DllNotFoundException:
Unable to load DLL 'fbembed':
Impossible to find the specified module (Exception from HRESULT: 0x8007007E).
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
c# firebird firebird-embedded firebird-3.0 firebird-.net-provider
背景:我正在使用jOOQ来访问Firebird数据库.Firebird 2.x的行大小限制为64KB.我以前从未达到过限制,但是这个特定的数据库使用UTF8,这意味着限制缩小到大约16K字符.
这就是我使用jOOQ的方式:
根据需要加载或创建POJO(生成).例如:
Book book = context.fetchOne("select * from book where book_id = ?", 1).into(Book.class);
Run Code Online (Sandbox Code Playgroud)根据需要使用book对象.
如果用户保存更改,则将其存储为记录.
BookRecord rec = context.newRecord(Tables.BOOK, book);
context.executeUpdate(rec);
Run Code Online (Sandbox Code Playgroud)第3步失败了,executeUpdate()因为某种程度上jOOQ正在将所有空VARCHAR字段转换为VARCHAR(4000).错误消息是
"SQL错误代码= -204.超出实现限制.块大小超出实现限制".
这是一个已知的Firebird限制,遗憾的是没有任何关于它的事情.
在表中我有大约8个空VARCHAR(512)字段,在UTF8中应该是大约8x4x512(或16KB),但是由于jOOQ将其解释为VARCHAR(4000),即8x4x4000(128KB),这显然超出了限制.
如果我将NULL或者空字段设置为某个随机字符串,那么jOOQ会将其转换为精确的字符串长度.("ABC"将被投射到varchar(3))
所以我的问题是:如果executeUpdate()没有jOOQ投射我的空字段,我如何开始工作VARCHAR(4000)?
firebird ×10
sql ×5
delphi ×2
firebird2.1 ×2
unicode ×2
c# ×1
currency ×1
delphi-2009 ×1
delphi-2010 ×1
firebird-3.0 ×1
firebird2.5 ×1
java ×1
jooq ×1
utf-8 ×1