- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个项目需要从 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驱动
来自/etc/odbc.ini 的 MySQL ODBC 设置
因此,当他们从 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/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!