一场由char引起的惨案

今天被一个小问题困扰了很久。
起因是页面加载时从数据库中读了数据出来,并将这些数据赋值给页面上的文本框等。
有一些select下拉菜单,如下所示:

							<select class="send-time">
                                <option selected="selected">尽快</option>
                                <option>0:00</option>
                                <option>1:00</option>
                                <option>2:00</option>
                                <option>3:00</option>
                                <option>4:00</option>
                                <option>5:00</option>
                                <option>6:00</option>
                                <option>7:00</option>
                                <option>8:00</option>
                            </select>

通过jquery重新设置select的默认选中项:

$(".send-time").find("option:contains('" + d.table[0].SendTime + "')").attr("selected", true);

这里的 d.table[0].SendTime 是从数据库中获取的数据,假设其为 “8:00”,但是刷新页面后,仍旧显示默认的“尽快”。
也怪我太着急,找了很久也没发现问题。

后来在控制台打印 d.table[0].SendTime 这个值时,发现的末尾有个空格,这使得他与option中的值匹配不上。
此刻我恍然大悟,原来是数据库中字段类型定义的问题。对于sendtime这个字段,我给他的类型是char(5),
char这个类型是固定长度的,当我保存的值为“8:00"时只占用了四个字节,剩下的字节保存的是一个空格。但
是对于nvarchar/varchar这些可变长度的类型来说,他们不会存在这个问题。

正是由于当初看书时对这些细节把握的不到位,导致了今天的问题,多么痛彻的领悟!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值