为什么在 oracle 中 sql 查询中的不区分大小写的比较两边都使用大写字母?
Why use uppercase on both sides for a case insensitive comparison in sql query in oracle?
为什么在 不区分大小写[=31] 的两边 使用 UPPER
或 LOWER
函数 =] Oracle 中 SQL 查询中的比较?
例如
SELECT * FROM emp WHERE LOWER(empName) = LOWER('John');
为什么上面代码中要用"John"写LOWER()?
这可能会出现什么问题?
SELECT * FROM emp WHERE LOWER(empName) = 'john';
请告知。
您提供的示例没有区别。但是,请考虑使用用户输入将您的 empName 与(即参数化查询)进行比较的情况。你相信用户会输入 'john' 而不是 'John' 或 'JOHN' 或 'jOhN' 或 'something else' 吗?如果不是,则需要用 LOWER
包装输入
大多数数据库都包含关于相等性和排序的标准设置 session.Various 组合将处理不同大小写、变音符号的场景,甚至是字符集有一些差异的语言(德语中的 ß 可以是与 SS 相比)。特别是对于 Oracle,为了不区分大小写,您可以 运行
改变会话设置 NLS_COMP='BINARY_CI'`
其中 BINARY_CI 是二进制比较并且不区分大小写。有人会比较小写的原因是因为他们不完全理解数据库的底层算法导致他们过去的比较截然不同,而且他们不知道为什么。所以基本上,它是为不知道自己在做什么的人而写的。
为什么在 不区分大小写[=31] 的两边 使用 UPPER
或 LOWER
函数 =] Oracle 中 SQL 查询中的比较?
例如
SELECT * FROM emp WHERE LOWER(empName) = LOWER('John');
为什么上面代码中要用"John"写LOWER()?
这可能会出现什么问题?
SELECT * FROM emp WHERE LOWER(empName) = 'john';
请告知。
您提供的示例没有区别。但是,请考虑使用用户输入将您的 empName 与(即参数化查询)进行比较的情况。你相信用户会输入 'john' 而不是 'John' 或 'JOHN' 或 'jOhN' 或 'something else' 吗?如果不是,则需要用 LOWER
包装输入大多数数据库都包含关于相等性和排序的标准设置 session.Various 组合将处理不同大小写、变音符号的场景,甚至是字符集有一些差异的语言(德语中的 ß 可以是与 SS 相比)。特别是对于 Oracle,为了不区分大小写,您可以 运行 改变会话设置 NLS_COMP='BINARY_CI'`
其中 BINARY_CI 是二进制比较并且不区分大小写。有人会比较小写的原因是因为他们不完全理解数据库的底层算法导致他们过去的比较截然不同,而且他们不知道为什么。所以基本上,它是为不知道自己在做什么的人而写的。