SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird
Posted
技术标签:
【中文标题】SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird【英文标题】:Column aliasing in SELECT statements doesn't work with SQuirrel SQL + Firebird 【发布时间】:2012-09-24 11:00:59 【问题描述】:我尝试使用 SQuirrel SQL 3.4 + Firebird 1.5 + Driver JDBC Jaybird 2.2.[0|1] (JVM 1.7.0_03) 在 SELECT 语句中添加列别名,但不起作用。别名列显示为列的原始名称。在另一个工具 (DBExpert) 中,同样的语句可以正常工作。
声明:SELECT column1 AS alias1, column2 FROM table;
SquirrelSQL 中的结果列名称:column1 - column2
DBExpert 中的结果列名称: alias1 - column2
尝试在别名周围添加 ' 和 ",但也不起作用。
有人有想法吗?
编辑:我将 JDBC Jaybird 驱动程序更新到 2.2.1 版本(9 月 30 日发布),问题仍然存在。
编辑 2:问题已解决!
问题是由 Squirrel SQL 的默认首选项引起的。
要修复它,请转到“文件”->“全局首选项”,在“数据类型控件”选项卡中找到“常规(适用于所有类型)”并标记组合框“使用列标签而不是列名在结果标题中”。
见截图:http://i1-win.softpedia-static.com/screenshots/SQuirrel-SQL-Client_4.png?1345342622
享受吧。
【问题讨论】:
问题已修复。请参阅问题“编辑 2”。 【参考方案1】:在 Squirrel 中,需要在以下位置进行设置:
文件 > 全局首选项 > 数据类型控件 > 检查:使用列标签 而不是结果标题中的列名
【讨论】:
这对我有用!【参考方案2】:问题是由于 JDBC 规范中的混淆(至少从历史上看)以及 Jaybird 在结果集元数据中报告为 columnNames 和 columnLabels 的内容方面发生了变化。据我所知,在 JDBC 2.0 和更早版本中,columnName 和 columnLabel 之间的区别没有明确定义,因此在几乎所有情况下,getColumnName()
返回的值都与getColumnLabel()
相同(即,如果指定了 AS 别名)。
使用 JDBC 3.0 进行了更清晰的区分:columnName
是表中基础列的名称(如果有),columnLabel
是 AS 别名(如果指定),否则 columnName
. Jaybird 2.1.6 及更早版本过去常常为 getColumnLabel()
和 getColumnName()
(即 columnLabel
)返回相同的值,这在 Jaybird 2.2 中已更改。
显然 Squirrel 默认使用不符合 JDBC 的选项 columnName
,而不是 columnLabel
。正如您已经发现的那样:有一个选项可以让它使用columnLabel
。另一个选择是使用 Jaybird 2.2.1 或更高版本并添加连接属性 columnLabelForName=true
。
【讨论】:
你的解释很有启发性。谢谢!以上是关于SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird的主要内容,如果未能解决你的问题,请参考以下文章