一场由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这些可变长度的类型来说,他们不会存在这个问题。

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

发布了37 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38404507/article/details/100043995