我们使用firebird作为我们的数据库.我们如何在数据库中存储货币符号.我们应该使用哪个字符集或通常最佳做法?
例如,存储"$"或"¥"直接显示,但更复杂的符号在数据库表中没有正确显示,即"₡"不会存储在数据库中.
什么被普遍认为是这种事情的"最佳实践".
编辑 -
让我指出我们使用的语言是C#.我怀疑UTF8会是答案,但我们如何将字符存储在数据库中,我们是使用Unicode,Hex还是Decimal等效的....还是我们只是使用字符?
我想禁用所有外键约束并在之后重新启用它们,有没有办法做到这一点?
我知道SQLServer允许这样做,但是Firebird呢?
是否存在确定Firebird SQL版本的任何方法?使用SQL或代码(delphi,C++).
再见
考虑这个表(来自http://www.tizag.com/mysqlTutorial/mysqlmax.php):
Id name type price
123451 Park's Great Hits Music 19.99
123452 Silly Puddy Toy 3.99
123453 Playstation Toy 89.95
123454 Men's T-Shirt Clothing 32.50
123455 Blouse Clothing 34.97
123456 Electronica 2002 Music 3.99
123457 Country Tunes Music 21.55
123458 Watermelon Food 8.73
Run Code Online (Sandbox Code Playgroud)
此SQL查询返回每种类型中最昂贵的项:SELECT类型,MAX(价格)FROM产品GROUP BY类型
Clothing $34.97
Food $8.73
Music $21.55
Toy $89.95
Run Code Online (Sandbox Code Playgroud)
我还希望为每一行获取属于上述最高价格的字段ID和名称.什么SQL查询将返回这样的表?
Id name type price
123455 Blouse Clothing 34.97
123458 Watermelon Food 8.73
123457 Country Tunes Music 21.55
123453 Playstation Toy …Run Code Online (Sandbox Code Playgroud) 我正在使用ibpp库编写自己的Firebird数据库浏览器.有没有办法可以使用SQL语句获取表定义?
是否可以在Firebird中重命名表,或者我应该创建一个新表,然后使用insert移动数据?
我们在单个开发者机器和一些客户端上遇到问题.单Linq查询生成两个不同的SQL查询.问题实际上是第二个查询具有firebird不支持的"OUTER APPLY"语句.我们认为这不是代码问题,而是环境问题,但我会粘贴代码.
linq:
AIds = (from x in context.RISK_T_ASSESS_HIST
where (x.ID_RISKOBJECT.HasValue && x.F_CREATEDON >= Freq.StartDate && x.F_CREATEDON <= Freq.EndDate)
group x by x.ID_RISKOBJECT into gr
let lastCreated = gr.Max(p => p.F_CREATEDON)
select new
{
ObjId = gr.Key
,
LastStatus = gr.Where(p => p.F_CREATEDON == lastCreated && p.ID_RISKOBJECT == gr.Key).Select(p => p.F_STATUS).FirstOrDefault()
}).Where(x => x.LastStatus == 0 || x.LastStatus == 1).Select(x => x.ObjId.Value).ToArray();
Run Code Online (Sandbox Code Playgroud)
使用OUTER APPLY的SQL
SELECT
"G"."ID_RISKOBJECT" AS "ID_RISKOBJECT"
FROM (SELECT
"C"."A1" AS "C1",
"C"."K1" AS "ID_RISKOBJECT"
FROM ( SELECT
"E"."ID_RISKOBJECT" …Run Code Online (Sandbox Code Playgroud) 我使用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.
谢谢!
是否有一种快速方法可以列出为数据库定义的所有Firebird域,这些域实际上并未被任何字段使用?我有一个包含许多表和许多域的大型数据库,似乎很多都不再使用了,所以我想是时候进行清理了!
我认为这可以通过查询RDB$...系统表来实现,但我不确定如何做到这一点.
firebird ×10
sql ×5
firebird2.1 ×3
delphi ×2
c# ×1
c++ ×1
constraints ×1
currency ×1
delphi-2010 ×1
firebird2.5 ×1
linq ×1
max ×1
unicode ×1
utf-8 ×1