null与""

本文探讨了JSP页面向Servlet传递参数时的行为差异:对于表单提交,即使未填写某些字段,也会发送空字符串;而对于URL中未指定的参数,则返回null。这是由于Servlet API的规范所决定。
 jsp-->servert时,只要是表单里有的属性,就算你没写任何东西,默认的会提交一个空(" ");而你在地址栏里没有写属性名和值时,它就是为null;这是因为servletApi(or null if the parameter does not exist.)!
<think>我们正在讨论SQL中NULL值的概念。用户询问的是“NULLNull”的区别。注意,这里用户可能是在问大小写的问题,但本质上NULL在SQL中是一个关键字,表示缺失值。根据引用:-NULL是数据库中特有的数据类型(引用[1]),表示未知或不确定的值。-在SQL中,NULL任何值的比较(包括NULL本身)都会返回未知(unknown),因此不能使用`=NULL`,而必须使用`ISNULL`(引用[2][^2])。-引用[4][^4]也举例说明了错误使用`=NULL`的情况。现在,关于大小写问题:在SQL中,关键字是不区分大小写的。也就是说,NULLNullnull在SQL解析时都被视为同一个概念。因此,从语义上讲,它们没有区别。但是,我们需要注意:1.在字符串中,'NULL'、'Null'、'null'是区分大小写的,因为它们是字符串值,而不是关键字。2.在SQL语句中,我们通常使用大写NULL来表示关键字,这是一种约定俗成的做法,但数据库系统并不会因为大小写而改变其含义。因此,结论是:-作为关键字:NULLNullnull没有区别。-作为字符串值:'NULL'、'Null'、'null'是不同的字符串。下面我们详细解释:</think>### SQL中`NULL``Null`的区分详解 #### 1. **核心结论** - **语义区别**:**无实质区别** ✅ `NULL`和`Null`在SQL中表示**完全相同的概念**——缺失值或未知值(引用[1][^1])。 - **大小写敏感性**:**不敏感** ✅ SQL标准规定关键字不区分大小写(`NULL`/`Null`/`null`等效)。 - **唯一区别**:**字符串值中的大小写** ❗ 当出现在**字符串内**时(如`'Null'`),会被视为普通文本而非关键字。 --- #### 2. **关键区分场景** ##### (1) 关键字使用(等效) ```sql -- 以下语句完全等效 SELECT * FROM users WHERE phone IS NULL; -- 标准写法 SELECT * FROM users WHERE phone IS Null; -- 大小写不敏感 SELECT * FROM users WHERE phone IS null; -- 解析结果相同 ``` > ✅ 所有写法均正确检测空值(引用[2][^2]) ##### (2) 字符串值中的区别 ```sql -- 错误:将字符串'Null'误判为空值 SELECT * FROM logs WHERE message = NULL; -- 永远返回空集(引用[4][^4]) -- 正确:区分关键字和字符串 SELECT * FROM logs WHERE message IS NULL; -- 检测空值 WHERE message = 'Null'; -- 检测字符串"Null"(区分大小写) WHERE message = 'null'; -- 检测字符串"null" ``` --- #### 3. **常见误区解决方案** | **场景** | **错误写法** | **正确写法** | **原因** | |-------------------------|-----------------------|------------------------|-----------------------------| | 检测空值 | `WHERE col = NULL` | `WHERE col IS NULL` | `=`对NULL永远返回未知[^2] | | 空值替换 | `SELECT NULL` | `SELECT COALESCE(col,0)` | 需用函数处理空值(引用[3][^3]) | | 字符串包含"Null" | `WHERE col IS NULL` | `WHERE col = 'Null'` | 字符串需用引号包裹 | --- #### 4. **NULL处理最佳实践** 1. **检测空值**: 始终用`IS NULL`/`IS NOT NULL`(引用[2][^2]): ```sql -- 正确检测 SELECT * FROM orders WHERE discount IS NOT NULL; ``` 2. **空值转换**: 使用数据库专用函数: ```sql -- SQL Server SELECT ISNULL(salary, 0) AS salary_clean FROM employees; -- MySQL/Oracle SELECT COALESCE(salary, 0) FROM employees; -- 多数据库兼容[^3] ``` 3. **避免逻辑错误**: 在`JOIN`或`WHERE`中谨慎处理空值: ```sql -- 错误示例(引用[4][^4]) LEFT JOIN score c ON a.s_id=c.s_id AND c.c_id = NULL -- 正确写法 LEFT JOIN score c ON a.s_id=c.s_id AND c.c_id IS NULL ``` --- #### 5. **技术原理说明** - **NULL本质**: 代表"未知状态",非空字符串、非0、非False(引用[1][^1])。 - **三值逻辑**: SQL对`NULL`的操作返回`UNKNOWN`而非`TRUE/FALSE`(引用[2][^2]): ```sql SELECT NULL = NULL; -- 返回UNKNOWN(非TRUE) SELECT NULL OR TRUE; -- 返回TRUE(布尔逻辑特殊处理) ``` > 💡 **设计启示**:数据库用`IS NULL`而非`= NULL`,因`=`要求确定值比较,而`NULL`本质是状态标识。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值