【问题标题】:How to query with unicode input value in Firebird 2.1? [duplicate]如何在 Firebird 2.1 中使用 unicode 输入值进行查询? [复制]
【发布时间】:2023-03-30 08:10:01
【问题描述】:

我做了一个简单的 SELECT 语句,如下所示:

select t.no_qult, t.desc_qult
from qualities_type t
where t.name_qult = 'Lỗi vải'

name_qult 字段是 UNICODE_FSS 字符集。问题是它不适用于 unicode 输入值 Lỗi vải(越南语),当我使用纯文本 Lá»—i vải 时才有效。

有人知道如何使用 unicode 输入值进行查询吗?

【问题讨论】:

  • 您使用什么工具来执行查询?你指定了什么连接字符集?
  • 我从 Android 发出请求,使用 RESTful Web 服务从 Firebird 数据库获取数据。
  • 这不是足够的信息,但看看我链接的问题,你可能使用了错误的连接字符集。否则你真的需要发minimal reproducible example

标签: firebird


【解决方案1】:

不要使用文字。不要将数据放入查询文本中,将其作为“参数”放在查询之外。

它有很多好处,比如更可靠的解析、更多的类型检查、更安全以及通常更快的速度(您可以准备一次查询,然后多次运行它,只需更改参数值)。

如何在 SQL 查询中对参数进行编码取决于您在编程语言中用于连接到 Firebird 的库。有关一些示例,请参阅http://bobby-tables.com/。以下是三个常用的约定尝试:

  • SELECT .... WHERE t.name_qult = ? -- Firebird 原生支持,基于索引的参数访问
  • SELECT .... WHERE t.name_qult = :NAME_PARAM -- BDE / Delphi 风格
  • SELECT .... WHERE t.name_qult = @NAME_PARAM -- MS SQL / .Net 风格

我不知道您使用的语言和程序支持哪些风格。 IB Expert 使用 Delphi 库,因此使用 #2 选项。 Java 编写的程序倾向于使用 #1 选项。


另外,在您的连接选项中检查“连接字符集”是否设置为 UTF-8 或可以传输所有这些特定字符的越南语代码页。


UNICODE_FSS 字符集已过时。如果可能,最好尽可能使用 UTF-8 字符集。

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2012-11-15
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多