浏览模式: 标准 | 列表2008年01月的文章

heredoc和phpwind的模板技术

heredoc和注释的灵活运用

» 阅读全文

Tags: 模板

理解MySQL数据类型

数据库存储中的数据类型与大小各异。有些地方只存储数字类型,有些只存储文本类型,有些二者而兼之。而很多数据库支持各种专用类型:日期和时间类型,二进制字符类型以及布尔类型。

选择数据类型与数据相匹配是数据库设计中最为重要的部分,因为这种类型将会影响到RDBMS的效率与性能。所以,对RDBMS的数据类型选择应给予足够的重视。

这就是编写本文的主要目的。表A将列举了MySQL支持的绝大部分重要的数据类型,而MySQL是当前最为流行的免费RDBMS。文中还描述了何时与如何使用这些数据类型。这将有助于建立一个数据库的合理设计。

表 A

 

数据类型

描述

字节

推荐使用

SMALLINT

整数,从-32000到 +32000范围

2

存储相对比较小的整数。

比如: 年纪,数量

INT

整数,从-2000000000 到 +2000000000 范围

4

存储中等整数

例如: 距离

BIGINT

不能用SMALLINT 或 INT描述的超大整数。

8

存储超大的整数

例如: 科学/数学数据

FLOAT

单精度浮点型数据

4

存储小数数据

例如:测量,温度

DOUBLE

双精度浮点型数据

8

需要双精度存储的小数数据

例如:科学数据

DECIMAL

用户自定义精度的浮点型数据

变量;取决于精度与长度

以特别高的精度存储小数数据。

例如:货币数额,科学数据

CHAR

固定长度的字符串

特定字符串长度(高达255字符)

存储通常包含预定义字符串的变量

例如: 定期航线,国家或邮编

VARCHAR

具有最大限制的可变长度的字符串

变量; 1 + 实际字符串长度 (高达 255 字符)

存储不同长度的字符串值(高达一个特定的最大限度).

例如:名字,密码,短文标签

TEXT

没有最大长度限制的可变长度的字符串

Variable; 2 +聽 actual string length

存储大型文本数据

例如: 新闻故事,产品描述

BLOB

二进制字符串

变量;2 + 实际字符串长度

存储二进制数据

例如:图片,附件,二进制文档

DATE

以 yyyy-mm-dd格式的日期

3

存储日期

例如:生日,产品满期

TIME

以 hh:mm:ss格式的时间

3

存储时间或时间间隔

例如:报警声,两时间之间的间隔,任务开始/结束时间

DATETIME

以yyyy-mm-ddhh:mm:ss格式结合日期和时间

8

存储包含日期和时间的数据

例如:提醒的人,事件

TIMESTAMP

以yyyy-mm-ddhh:mm:ss格式结合日期和时间

4

记录即时时间

例如:事件提醒器,“最后进入”的时间标记

YEAR

以 yyyy格式的年份

1

存储年份

例如:毕业年,出生年

ENUM

一组数据,用户可从中选择其中一个

1或 2个字节

存储字符属性,只能从中选择之一

例如:布尔量选择,如性别

SET

一组数据,用户可从中选择其中0,1或更多。

从1到8字节;取决于设置的大小

存储字符属性,可从中选择多个字符的联合。

例如:多选项选择,比如业余爱好和兴趣。

对于一个完整的列表和详细描述,可以查看MySQL manual。你也可以阅读文章Choosing the Right Type for a Column

from:http://www.aslibra.com/blog/read.php?370

Tags: 数据类型

SQLite 完整中文FAQ

FAQ中文版

  1. 如何创建自增字段?
  2. SQLite 支持哪些数据类型?
  3. 为什么能向 SQLite 数据库的整型字段中插入字符串?
  4. 为什么 SQLite 认为表达式 '0'=='00' 为真?
  5. 为什么 SQLite 不允许在同一张表里使用 '0' 和 '0.0' 作为两个不同的行的主键?
  6. 为什么不能在 Linux box 中读取在 SparcStation 中创建的 SQLite 数据库?
  7. 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?
  8. SQLite是线程安全的吗?
  9. 如何列出一个 SQLite 数据库中的所有的表/索引?
  10. SQLite数据库是否有已知的大小限制?
  11. 在 SQLite 中 VARCHAR 的最大长度是多少?
  12. SQLite 是否支持 BLOB 类型?
  13. 如何从一个已存在的 SQLite 数据表中添加/删除字段?
  14. 我删除了很多数据但是数据库文件并没有减小,是不是 Bug?
  15. 是否能将 SQLite 用于商业用途而不用交版权费用?
  16. 我如何使用含有单引号(')的字符串?
  17. SQLITE_SCHEMA 错误代表什么?
  18. 为什么ROUND(9.95,1) 返回 9.9 而不是 10.0? 难道9.95 不该向上进位么?

» 阅读全文

Tags: sqlite

CI的数据库字符集问题解决

哈哈,不需要什么设置了

只要用svn到最近版本就ok了

在config的database.php多了

PHP代码
  1. $db['default']['char_set'] = "utf8";   
  2. $db['default']['dbcollat'] = "utf8_general_ci";  

 

淡水正好用utf8,不用再改了.

Tags: codeigniter

PHP5中的时间相差八小时的解决办法

PHP5系列版本新增了时区设置,默认为格林威治时间,与中国所在的东8区正好相差8个小时

方法1:
       找到php.ini中的“;date.timezone =”这行,将“;”去掉,改成“date.timezone = PRC”(PRC:People's Republic of China 中华人民共和国),重启Apache,问题解决。

方法2:
        在php5以及起以上的版本,要输出本地的时间(限中国),可以这么写代码:
PHP代码
  1. <?php   
  2. date_default_timezone_set('Asia/Shanghai');   
  3. echo date('Y-m-d H:i:s');   
  4. ?>   

也可以这样写代码:
PHP代码
  1. <?php   
  2. date_default_timezone_set('Asia/Chongqing');   
  3. echo date('Y-m-d H:i:s');   
  4. ?>   
下次再有人问,就直接发这个地址给他。^_^

Tags: 时间

1:N关系时的一句sql查询(未完善)

这篇日志被加密了,请输入密码后查看。

实现 301 转向的几个方法

如果需要做网址转向,一般上在 php 用 header() 实现的转向是 302:

PHP代码
  1. header("Location: http://www.newaddress.com/");  

301 及 302 同样可以做到网址的转向,但分别在于 301 是永久的转向,而 302 是暂时性质的转向。这个分别对于使用者来说是没有分别的,但对于 search engine 就有分别了。Google 推荐网站管理员当转换网址时用 301 转向。而以下分别是透过 .htaccess、PHP 及 ASP 实现 301 转向的方法,而假设新 domain 是 newdomain.com:

.htaccess

在网站的根目录建立一个 .htaccess 档案,并加入以下内容:

RewriteEngine On

RewriteRule ^(.*)$ http://www.newdomain.com/ [R=301,L]

PHP

在 index.php 的最顶加入以下几行:

PHP代码
  1. <?php   
  2. header("HTTP/1.1 301 Moved Permanently");   
  3. header("Location: http://www.newdomain.com/");   
  4. exit();   
  5. ?>   

 

ASP

 

在 index.asp 或 default.asp 的最顶加入以下几行:

XML/HTML代码
  1. <%   
  2. Response.Status="301 Moved Permanently"  
  3. Response.AddHeader "Location","http://www.newdomain.com/"   
  4. Response.End   
  5. %>  

 

Tags: 301, seo

PHP 分割中文

PHP 内建的 substr 函式可以分割文字,但要分割的文字如果包括有中文字往往会遇到问题,这可以用 mb_substr() 来做。mb_substr() 的用法与 substr() 很相似,只是在 mb_substr() 最后要加入多一个参数,以设定字符串的编码,但要先让 PHP 支援 mbstring 才可以。

在编译 PHP 时加入 --enable-mbstring 选择就可以加入 mbstring 模块了。以下是 mb_substr() 的使用方法:

 

PHP代码
  1. <?php   
  2. $string = '这是测试用的中文字';   
  3. $string = mb_substr($string, -1, 3, 'gb2312');   
  4. echo $string// 会输出 '中文字'   
  5. ?>    

以上的第三行要注意,将 gb2312 修改成中文字所用的编码,例如 UTF-8。淡水牢骚:国内多数idc都是windows的系统,而且好多函数不支持.

Tags: substr, mb_substr

设定 PHP mail 的 Return Path

在 PHP 内用 mail() 发出邮件时,如果没有指定 Return Path,系统便会以预设的电邮地址代替 (例如 admin@localhost 这类)。以下是一个常见的错误:

PHP代码
  1. <?php   
  2. $header"From:My Name<my_name@mydomain.com>";   
  3. $header.= "Reply-To: My Name<my_name@mydomain.com>";   
  4. $header.= "Return-Path: My Name<my_name@mydomain.com>";   
  5. mail($to$subject$email_body$header);   
  6. ?>  

 

以上设定了所发出的邮件的 From 内容,但这是不够的,只要查看所发出邮件的 header,会发现有一个 Return-Path 显示系统的预设电邮。因为现时 spam 非常猖獗,很多 email server 会这类 email 档掉或者标示成 spam,将以上程序码改成这档便可以避免这个问题:

PHP代码
  1. <?php   
  2. $header"From:My Name<my_name@mydomain.com>";   
  3. mail($to$subject$email_body$header);   
  4. ?>  

Tags: mail()

通过gzip来压缩js文件

又是来自咕噜咕噜。为什么要压缩js文件?很明显,压缩后,文件个头小了,下载就快了,网页也就能在更短的时间内呈现在我们的面前,正常情况下,gzip对js的压缩比能达到3:1左右,以ext-all.js为例,源文件大小:463k,经过gzip压缩后的个头为125k,几乎到了4:1。

PHP代码
  1. <?php    
  2.     //参数可以是数组或者字符串   
  3.     gzip_file("ext-all.js");   
  4.     
  5.     function gzip_file($file_s){   
  6.         if(!is_array($file_s)){   
  7.             $files[] = $file_s;   
  8.         }   
  9.         else{   
  10.             $files = $file_s;   
  11.         }   
  12.     header("Expires:".gmdate("D, d M Y H:i:s", time()+15360000)."GMT");    
  13.     header("Cache-Control: max-age=315360000");    
  14.     $mtime = filemtime($file);    
  15.     $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;    
  16.     header("Last-Modified:" . $gmt_mtime);    
  17.     ob_start(‘ob_gzhandler’);   
  18.     foreach($files as $file){   
  19.     $ext = array_pop(explode(‘.’, $file));    
  20.     switch ($ext){    
  21.     case ‘css’:    
  22.      header("Content-type: text/css");    
  23.      break;    
  24.     case ‘js’ :    
  25.      header("Content-type: text/javascript");    
  26.      break;    
  27.     case ‘gif’:    
  28.      header("Content-type: image/gif");    
  29.      break;    
  30.     case ‘jpg’:    
  31.      header("Content-type: image/jpeg");    
  32.      break;    
  33.     case ‘png’:    
  34.      header("Content-type: image/png");    
  35.      break;    
  36.     default:    
  37.      header("Content-type: text/plain");    
  38.     }    
  39.     echo implode(”, file($file));    
  40.     }   
  41.     ob_end_flush();    
  42. }   
  43. ?>   

假设将上面的代码存储为ext-all.php
那么引用的时候只需

PHP代码
  1. include("ext-all.php")  

就能实现对ext-all.js的压缩,当然前提是服务端支持zlib。

Tags: gzip

Records:1612