又是basename,其实真的不想谈它,只是这两天在修正neatpic的BUG时,又被它折腾了。
前两天有朋友在回复里说,还是对中文处理一下吧。所以,我想了想,对中文又重新更新了下,结果问题就来了。我明明文件名是:“图片2副本.jpg”,但在cache之后就成了“2副本.jpg”,2前面的图片两个字就没有了。。这个,也太妖异了。得,你说不支持中文吧,干脆连后面的副本也没有就算了。却偏偏把前面的中文去掉了。
后来用pathinfo也测试了一下,同样的问题。。。
但是我在win服务器下却一切正常。后来我检查了一下我的WEB服务器,我的版本是5.2.6,
测试代码:echo basename('E:/test/图片2副本');点击查看测试页。
这个真叫一个妖啊。。。
所以我现在是:str_replace(dirname($filename).DIRECTORY_SEPARATOR,'',$filename);
希望遇到同样问题的能够再次避免吧。。
今天我们继续学习一下MYSQL的数据类型
浮点型
从MYSQL3.23开始,FLOAT和DOUBLE类型就一直分别对应着IEEE标准所定义的单精度浮点数和双精度浮点数,绝大多数编程语言也都支持这两种数据类型。
当某个字段设置成这两种类型时,会要求按(m,d)这样的格式输入参数,其中m和上文介绍INT时所讲的m效果一样,仅仅在显示/打印结果时有一定的排版作用,而对数据的精确度没有影响。可是d这个参数就不一样了,d代表了小数点后面的数字个数,而且会按照d的大小来进行四舍五入,例如:1234.5678如果存储到FLOAT(8,3)这样的字段里,实际存放的是1234.568,最后一位会四舍五入。
存储FLOAT和DOUBLE时,如果超出了这两种类型的范围,将会被替换成该类型的最大可取值(一般由当前操作系统决定,我不知道MYSQL是怎么样。),可以使用SHOW WARNING来查看警告内容。
MYSQL对浮点数有一定的要求,即一定要符合通用计数法,小数点一定是“.”,而不能是“,”(因为有部分欧洲国家使用逗号作为小数点,我也是第一次听说,黑黑),MYSQL永远会以这种写法向客户返回查询结果,只有在非常大或非常小的数值,会采用科学计数法表示,如1.234E+017。如果想让浮点数表现形式变成其他样式,有两种方式:一是利用SQL查询中的FORMAT函数,二是用客户端程序中的FORMAT函数,例如php中就可以使用sprintf或者number_format等来改变显示效果
类型 |
含义 |
FLOAT(m,d) |
单精度浮点数,8位精度,占4字节 |
DOUBLE(m,d) |
双精度浮点数,16位精度,占8字节 |
REAL(m,d) |
DOUBLE的同义词 |
说到浮点数,当然要提定点数了
正因为MYSQL在处理浮点数时,最后一位会被自动的四舍五入,而我们实际上并不需要这一位被四舍五入(比如在处理财务数据时),怎么办呢?定点数可以解决这个问题。
定点数(DECIMAL)数字是以字符串的形式来进行存储的,并且不被允许存储指数形式,每位数字占用一个字节,外加两个字节的开销,所以,占用了更多的空间,但可表示的数值范围却比较小。
在进行存储的时候,也有两个参数DECIMAL(p,s)这回,这两个参数都有作用了。p代表了数据的总位数(不含小数点),最大65,s代表了小数点后的数字位数,最大为30。比方说:DECIMAL(6,3)取值范围为-999.999~999.999,这是新的版本的表示方法。不知道我有没有记错,我记得在以前的版本里,DECIMAL(6,3),这个6并不是代表了总位数,而是小数点前的位数(可能是在4.0吧)。
在MYSQL内部,定点数是被保存为二进制格式的,把定点数从小数点开始分割,并为它们各自分配所占用的字节数(最初是以每4个字节进行划分,虽然每个字节可以容纳2位数字,但4个字节却可以容纳9位数字,超过4个字节后,如果有多出的数字就划分一个字节来进行存储,同样如果是9位数字,还是只占4个字节)。根据这个规定,我们可以认为DECIMAL(6,3)其实是和DECIMAL(18,9)占用了同样多的字节数(8个字节)。如此说来DECIMAL(19,9)实际就占用了9个字节。
类型 |
含义 |
DECIMAL(p,s) |
定点数,以字符串形式保存,最长为65 |
NUMERIC,DEC |
同上(应该没有记错吧) |
参考:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
其实我要讲的并非什么大道理,而是我在读者上看到的一篇文章。内容大概讲的是文章作者(简称作者)乘大巴回杭州,让大巴司机在城北的某个路口放他下来——因为如果乘到终点站,那他到家的路程比从那个路口回到家中的路程远的多。
刚下车,就有一出租车过来。上车后,司机说:这路口每天晚上都有从大巴下来的顾客,在这里等是一等一个准。如果去车站的话,那边同行太多,和他们抢生意,不一定能抢得过。而现在这样,运气好的话,一天可以赚两天的钱。作者非常感慨,认为司机非常会做生意。不料司机说,这是他老婆教她的。
说到这里,或许有人在猜想,这。。。。怎么和以前那个了出租车MBA的故事很象?但事实并不是这样。
司机说他老婆不是开出租的,是擦鞋的,一天赚的钱是同行的四五倍。作者不信,于是司机一一道来:
他老婆每天起早,先到汽车客运站,有很多人等车,很无聊,这时候正好擦擦皮鞋。8、9点的时候,擦鞋的多了,她就到洗车店那里去,帮那些在洗车并且很无聊的人擦皮鞋,11点左右去车站附近的小饭店,那些在等上菜的人,也可能会擦皮鞋。下午1点多人少的时候,再去洗车店。再晚一点的时候,去写字楼门口,那些想去约会的小青年也会去擦擦皮鞋。
故事就这样结束了,虽然我认为事情可能是虚构的,但讲的道理也是有的:大多数人在做的事情,要么抢在他们前面,要么就干脆放弃。
顺便再讲个网上关于白领的新定义:今天发薪水,交了房租、水电费,买了油、米、煤气和泡面,摸摸口袋,感慨一下,这个月工资又白领了。