Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle区分大小写的原因?_Oracle_Database Design_Case Sensitive - Fatal编程技术网

oracle区分大小写的原因?

oracle区分大小写的原因?,oracle,database-design,case-sensitive,Oracle,Database Design,Case Sensitive,Oracle是区分大小写的,而SQL Server和MySQL等其他服务器默认不区分大小写,这有什么原因吗? 我知道有很多方法可以启用/禁用区分大小写的功能,但oracle与其他数据库的不同似乎很奇怪 我还试图理解区分大小写的原因。我可以看出“表”和“表”在哪里可以被视为等价的,而不是等价的,但有没有一个案例表明区分大小写会产生实际的影响 我对数据库有些陌生,目前正在上一门课。如果我不得不猜测,我会说是出于历史/向后兼容性的原因。 第一次出现在1977年,当时的技术可能需要花费大量的计算费用来进

Oracle是区分大小写的,而SQL Server和MySQL等其他服务器默认不区分大小写,这有什么原因吗?

我知道有很多方法可以启用/禁用区分大小写的功能,但oracle与其他数据库的不同似乎很奇怪

我还试图理解区分大小写的原因。我可以看出“表”和“表”在哪里可以被视为等价的,而不是等价的,但有没有一个案例表明区分大小写会产生实际的影响


我对数据库有些陌生,目前正在上一门课。

如果我不得不猜测,我会说是出于历史/向后兼容性的原因。

第一次出现在1977年,当时的技术可能需要花费大量的计算费用来进行不区分大小写的搜索,所以他们选择了精确匹配

默认情况下,Oracle标识符(表名、列名等)不区分大小写。您可以使用引号将它们区分大小写(例如:
从“我的表格”中选择*,其中“我的字段”=1
)。SQL关键字(
SELECT
WHERE
JOIN
等)始终不区分大小写

另一方面,默认情况下,字符串比较区分大小写(例如:
其中field='string'
将只匹配
'string'
所在的列)。通过将
NLS\u COMP
NLS\u SORT
设置为适当的值(例如:
language
BINARY\u CI
),可以使它们不区分大小写

注意:当查询数据字典视图(例如:
dba_表
)时,如果您创建的名称没有引号,则名称将以大写形式显示,第二段中解释的字符串比较规则将适用于此处


默认情况下,一些数据库(Oracle、IBM DB2、PostgreSQL等)将执行区分大小写的字符串比较,而其他数据库(SQL Server、MySQL、SQLite)则不区分大小写。无论如何,这都不是标准设置,所以请注意您的数据库设置是什么。

对于某些应用程序,区分大小写很重要,而对于其他应用程序,则不重要。无论您使用哪种DBMS,业务需求都应该确定您是否需要区分大小写。我不太担心“默认值”。

对于SQL Server,也要记住区分大小写是基于排序规则的。默认排序规则不区分大小写,但可以更改为区分大小写。类似的例子是,当使用非ASCII字符的全局应用程序需要UTF时,为什么默认Oracle数据库使用西欧字符集?我认为这只是供应商的偏好

Oracle实际上以不区分大小写的方式处理字段和表名,除非在标识符周围使用引号。如果创建的表的名称周围没有引号,例如create MyTable…,则生成的表名将转换为大写(即MyTable),并将以不区分大小写的方式处理。从MYTABLE中选择*,从MYTABLE中选择*,从MYTABLE中选择*都将与MYTABLE匹配(请注意,表名周围缺少引号)。下面是一个更详细地讨论此问题并比较数据库的示例。

您是在谈论Oracle关键字、表名、列名等吗?根据我的经验,这些都不区分大小写。有点奇怪的是,Oracle输出的这些标识符都是大写的,但您可以按任何大小写输入它们。您特别提到的区分大小写的东西是什么?
“Oracle与其他数据库的不同似乎很奇怪。”
Lol,欢迎使用Oracle!此外,当安装数据库表和列名的操作系统区分大小写时,它们通常区分大小写。例如,Linux安装中名为“Foo”的MySQL表不能被引用为“SELECT*FROM Foo”,它必须是“SELECT*FROM Foo”。在Windows上,这两种语句都是有效的。MySQL OS区分大小写的行为取决于所使用的特定引擎IIRC。MySQL也是一个例外,因为大多数数据库不依赖于OS文件系统的大小写敏感度。