我想在firebird sql查询中使用非ascii字符串文字。因此,我使用了FlameRobin来查看它是否首先起作用:我使用了这样的方法:
SELECT NAME FROM TABLE1 WHERE NAME = 'العربية'我也试过:
SELECT NAME FROM TABLE1 COLLATE UNICODE_CI_AI WHERE NAME = 'العربية'但没有成功。因为我已经声明了名称,使用UTF8字符集和UNICODE_CI_AI排序规则。
从这个参考网址链接:manuals/fblangref25-en/html/fblangref25-appx06-charsets.html
FlameRobin抛出一个关于语法的错误,它实际上不理解:'العربية‘字符串。所以我决定用Firebird 来修改数据库管理工具来做测试,这个工具现在接受了这种非ascii字符串文本,但是它没有正确地执行过滤器。
如何解决这个问题呢?
注:我正在使用FireBirdv2.5
发布于 2019-01-17 16:00:47
Firebird使用连接字符集来了解字符串值需要如何编码。默认的是NONE,这意味着不应用特定的字符集转换,而且每个工具/客户端的确切行为都不同,但通常客户端将应用系统默认字符集在字节值和字符串之间进行转换。
从UTF8连接时,需要指定连接字符集FlameRobin,查询将正常工作。
SELECT NAME FROM TABLE1 WHERE NAME = 'العربية'如果不指定连接字符集,则不应用连接字符集,因此字符串值将在平台默认编码(在Windows上不是utf8,但例如windows-1252)中解释。
发布于 2019-01-17 08:37:12
不要使用文字。不要将数据放入查询文本中,将其作为“参数”放在查询之外。
它有许多优点,比如更可靠的解析、更多的类型检查、更安全和更快(您可以准备一次查询,然后只修改参数值多次运行)。
如何编写SQL查询中的参数取决于您在编程语言中使用的连接到Firebird的库。有关一些示例,请参见http://bobby-tables.com/。以下是三种常用的尝试约定:
SELECT NAME FROM TABLE1 WHERE NAME = ? --本机由Firebird支持,基于索引的参数访问SELECT NAME FROM TABLE1 WHERE NAME = :NAME_PARAM -- BDE / Delphi风格SELECT NAME FROM TABLE1 WHERE NAME = @NAME_PARAM -- MS / .Net风格我不知道火焰罗宾和大师支持哪种口味。IB专家使用Delphi库,因此使用#2选项。Java编写的程序倾向于使用#1选项。
发布于 2019-03-27 16:47:41
对于"Charset=UTF8“连接,在连接字符串中包含ADO.NET (默认情况下为”无“)。如:
"User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost;Port=3050;Dialect=3;Charset=UTF8;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;“
https://stackoverflow.com/questions/54227877
复制相似问题