为什么列别名被忽略? Oracle SQL Developer -MySQL JDBC

问题描述 投票:0回答:1

我试图确定为什么我使用分配给列的别名执行的简单 SQL

select
语句返回数据,但使用原始列名而不是我分配的别名。

我在 Oracle SQL Developer 中使用通过 MySQL JDBC 驱动程序连接的 MariaDB 数据库执行 SQL 语句时遇到了这种情况。

参考版本:

  • Oracle SQL 开发人员 23.1.1.345.2114
  • Java(TM) 平台 11.0.21.0.2
  • MySQL JDBC 9.0.0
  • MariaDB 11.4.2

示例 SQL 表/数据:

-- Create the schema
CREATE SCHEMA example;

-- Use the schema
USE example;

-- Create the employee table
CREATE TABLE example.employee (
    name VARCHAR(20),
    phone_number CHAR(10),
    num0 INT,
    state_location CHAR(2)
);

-- Insert statements for 10 employees
INSERT INTO employee (name, phone_number, num0, state_location) VALUES
('Alice', '1234567890', 30, 'TX'),
('Bob', '2345678901', 25, 'CA'),
('Charlie', '3456789012', 28, 'NY'),
('David', '4567890123', 35, 'FL'),
('Eve', '5678901234', 22, 'WA'),
('Frank', '6789012345', 40, 'IL'),
('Grace', '7890123456', 27, 'GA'),
('Hank', '8901234567', 33, 'NV'),
('Ivy', '9012345678', 29, 'OR'),
('Jack', '0123456789', 31, 'AZ');

当我运行 SQL 语句时,例如:

select name, phone_number, num0, state_location from employee;

结果输出为:

name                 phone_number num0       state_location 
-------------------- ------------ ---------- -------------- 
Alice                1234567890   30         TX             
Bob                  2345678901   25         CA             
Charlie              3456789012   28         NY             
David                4567890123   35         FL             
Eve                  5678901234   22         WA             
Frank                6789012345   40         IL             
Grace                7890123456   27         GA             
Hank                 8901234567   33         NV             
Ivy                  9012345678   29         OR             
Jack                 0123456789   31         AZ             

10 rows selected.

使用像这样的一些别名更新此语句,我得到与上面完全相同的结果。

select name, phone_number, num0 as age, state_location as state_abbreviation from employee;

我希望按照典型方式修改列名(或者如果语法被此数据库配置拒绝,至少会出现错误)。

像这样:

name                 phone_number age                 state_abbr 
-------------------- ------------ ------------------- ---------- 

如果我在应用别名之前对列应用某些函数或操作,则将显示别名。

修改示例:

SELECT name, phone_number, cast(num0 as int) as age, CAST(state_location AS VARCHAR(2)) AS state_abbr FROM employee;

结果:

name                 phone_number age                 state_abbr 
-------------------- ------------ ------------------- ---------- 
Alice                1234567890   30                  TX         
Bob                  2345678901   25                  CA         
Charlie              3456789012   28                  NY         
David                4567890123   35                  FL         
Eve                  5678901234   22                  WA         
Frank                6789012345   40                  IL         
Grace                7890123456   27                  GA         
Hank                 8901234567   33                  NV         
Ivy                  9012345678   29                  OR         
Jack                 0123456789   31                  AZ         

10 rows selected. 

注意:我尝试使用以下样式定义列别名并得到相同的结果。

num0 as age
num0 "age"
num0 as "age"
num0 `age`
num0 as `age`

如果我转到命令行并直接连接到 MariaDB 并运行第一次别名尝试(即 num0 作为年龄)。 它确实成功打印了具有正确别名的值。

Oracle SQL Dev、mysql JDBC 和底层 MariaDB 之间的环境配置存在一些问题,导致了这种意外行为(至少对我来说是意外的)。

sql mariadb oracle-sqldeveloper alias
1个回答
0
投票

是的,你是对的,问题与通过

Oracle SQL Developer
驱动程序连接的
MySQL JDBC
有关。由于驱动程序功能和显示设置存在一些差异,与非 Oracle 数据库一起使用时,
Oracle SQL Developer
无法正确解释结果,因此,由于
Oracle SQL Developer
与 MySQL JDBC 驱动程序的交互方式,列别名等元数据可能无法正确刷新。

© www.soinside.com 2019 - 2024. All rights reserved.