为什么oracle区分大小写?

Ste*_*eve 44 oracle database-design case-sensitive

有没有理由说Oracle是区分大小写的,其他像SQL Server和MySQL不是默认的?

我知道有一些方法可以启用/禁用区分大小写,但是oracle与其他数据库的不同之处似乎很奇怪.

我也试图理解区分大小写的原因.我可以看到"Table"和"TaBlE"在哪里可以被认为是等价的而不是等价的,但是有一个例子,区分大小写实际上会有所不同吗?

我对数据库有些新意,目前正在上课.

Nul*_*ion 68

默认情况下,Oracle标识符(表名,列名等)不区分大小写.您可以通过使用它们周围的引号使它们区分大小写(例如:) SELECT * FROM "My_Table" WHERE "my_field" = 1.SQL关键字(SELECT,WHERE,JOIN等)总是不区分大小写.

另一方面,字符串比较是区分大小写的(例如:WHERE field='STRING'只会匹配它所在的列'STRING').您可以通过设置NLS_COMPNLS_SORT适当的值(例如:LINGUISTICBINARY_CI,分别)使它们不区分大小写.

注意:在查询数据字典视图(例如dba_tables:)时,如果您创建的名称没有引号,则名称将为大写,并且第二段中说明的字符串比较规则将适用于此处.

某些数据库(Oracle,IBM DB2,PostgreSQL等)默认情况下会执行区分大小写的字符串比较,其他数据库不区分大小写(SQL Server,MySQL,SQLite).这绝不是标准,所以只需要知道你的数据库设置是什么.


Dav*_*lor 7

Oracle实际上以不区分大小写的方式处理字段和表名,除非您使用标识符周围的引号.如果在名称周围创建一个没有引号的表,例如CREATE MyTable ...,则生成的表名将转换为大写(即MYTABLE),并将以不区分大小写的方式处理.来自MYTABLE的SELECT*,来自MyTable的SELECT*,来自myTabLe的SELECT*都将匹配MYTABLE(注意表名周围缺少引号).这是一篇关于这个问题好文章,它更详细地讨论了这个问题并比较了数据库.