gpt4 book ai didi

mysql - 从 Oracle 查询 MySQL 需要在字段名称周围加上引号

转载 作者:可可西里 更新时间:2023-11-01 08:57:58 27 4
gpt4 key购买 nike

我们有一个项目需要从 Oracle 查询 MySQL 数据库。数据库实例驻留在单独的 Linux 服务器上。

开发人员遇到的问题由来已久,他们需要在字段名称周围使用双引号。

MySQL 数据库是使用小写的表名和字段名创建的。示例:

CREATE TABLE IF NOT EXISTS web_access_log (
ip_address varchar(16) NOT NULL,
request varchar(256) NOT NULL,
last_request_date datetime NOT NULL,
count_last_date int(10) unsigned DEFAULT NULL,
total_hits int(10) unsigned DEFAULT NULL,
burst_start_date datetime DEFAULT NULL,
KEY index1 (last_request_date),
KEY ip_address (ip_address,request(255),last_request_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最近,我将 lower_case_table_names 添加到/etc/my.cnf.d/server.cnf 并将其值设置为“1”

[mysqld]
lower_case_table_names=1

Oracle 方面的信息:

用于连接MySQL的驱动是/etc/odbcinst.ini中的unixODBC驱动

enter image description here

来自/etc/odbc.ini 的 MySQL ODBC 设置

enter image description here

因此,当他们从 unixODBC 命令行 isql 查询 MySQL 并发出一个简单的 select userid from web_user_group 时,一切似乎都运行良好。

但是,如果他们通过 Oracle PL/SQL 命令行连接,他们会收到错误 "USERID": invalid indentifer

最后,在 PL/SQL 命令行中,如果他们在字段名称周围放置引号 select "userid"from web_user_group 那么查询就可以工作。

我知道大多数 Linux 版本都区分大小写,

Consequently, the case sensitivity of the underlying operating system plays a part in the case sensitivity of database, table, and trigger names. This means such names are not case-sensitive in Windows, but are case-sensitive in most varieties of Unix.

Taken from MySQL documentation 9.2.2 Identifier Case Sensitivity

那么这是由驱动程序控制的东西,还是 Oracle 和开发人员必须接受的“功能”?

我读过 this SO以及this的回答回答关于 SO 的类似问题。

但是,这些答案让我相信这是 Oracle 特有的。但它适用于从 Oracle 查询外部数据库吗?

最佳答案

This MariaDB document有一些关于 ODBC 区分大小写的注释:

For instance, Oracle follows to the SQL standard here. It converts non-quoted identifiers to upper case. This is correct and expected. PostgreSQL is not standard. It converts identifiers to lower case. MySQL/MariaDB is not standard. They preserve identifiers on Linux, and convert to lower case on Windows.

但是,您链接的 MySQL 文档说:

Column, index, stored routine, event, and resource group names are not case-sensitive on any platform, nor are column aliases.

由于您的问题是列名“userid”区分大小写,我认为问题可能出在 MySQL ODBC 驱动程序上,因为这听起来不像是正常的 MySQL 行为。

您可以尝试将 myodbc 连接器(即驱动程序库)从版本 5 升级到版本 8,但我不知道这是否有帮助 - https://dev.mysql.com/downloads/connector/odbc/

关于mysql - 从 Oracle 查询 MySQL 需要在字段名称周围加上引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com