冠琛's profile黑暗的心需要光的力量来复苏PhotosBlogLists Tools Help

Blog


    February 12

    MySQL的数据类型和建库策略

    无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。

      一、数字类型。数字类型按照我的分类方法分为三类:整数类、小数类和数字类。
      我所谓的“数字类”,就是指DECIMAL和NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位(包括小数点)占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会“失真”,所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。
      小数类,即浮点数类型,根据精度的不同,有FLOAT(单精度)和DOUBLE(双精度)两种。它们的优势是精确度,FLOAT可以表示绝对值非常小、小到约 1.17E-38 (0.000...0117, 小数点后面有37个零)的小数,而DOUBLE更是可以表示绝对值小到约 2.22E-308 (0.000...0222, 小数点后面有307个零)的小数。FLOAT类型和DOUBLE类型占用存储空间分别是4字节和8字节。如果需要用到小数的字段,精度要求不高的,当然用FLOAT了!可是说句实在话,我们“民用”的数据,哪有要求精度那么高的呢?这两种类型至今我没有用过——我还没有遇到适合于使用它们的事例。
      用的最多的,最值得精打细算的,是整数类型。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT,挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、3字节、4字节和8字节,就无符号的整数而言,这些类型能表示的最大整数分别为255、65535、16777215、4294967295和18446744073709551615。如果用来保存用户的年龄(举例来说,数据库中保存年龄是不可取的),用TINYINT就够了;九城的《纵横》里,各项技能值,用SMALLINT也够了;如果要用作一个肯定不会超过16000000行的表的AUTO_INCREMENT的IDENTIFY字段,当然用 MEDIUMINT 不用 INT ,试想,每行节约一个字节,16000000行可以节约10兆多呢!

      二、日期时间类型。
      日期和时间类型比较简单,无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型。只对日期敏感,而对时间没有要求的字段,就用DATE而不用DATETIME是不用说的了;单独使用时间的情况也时有发生——使用TIME;但最多用到的还是用DATETIME。在日期时间类型上没有什么文章可做,这里就不再详述。

      三、字符(串)类型。
      不要以为字符类型就是 CHAR !CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要占去10个字节的空间;而VARVHAR则是可变长度的,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的,VARCHAR 类型的实际长度是它的值的(实际长度+1)。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度呀!从这个“+1”中也应该看到,如果一个字段,它的可能值最长是10个字符,而多数情况下也就是用到了10个字符时,用VARCHAR就不合算了:因为在多数情况下,实际占用空间是11个字节,比用CHAR(10)还多占用一个字节!
      举个例子,就是一个存储股票名称和代码的表,股票名称绝大部分是四个字的,即8个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是固定长度的,股票名称当然要用 CHAR(8) ;股票代码虽然是不固定长度,但如果使用VARVHAR(6),一个深圳的股票代码实际占用空间是5个字节,而一个上海的股票代码要占用7个字节!考虑到上海的股票数目比深圳的多,那么用VARCHAR(6)就不如CHAR(6)合算了。
      虽然一个CHAR或VARVHAR的最大长度可以到255,我认为大于20的CHAR是几乎用不到的——很少有大于20个字节长度的固定长度的东东吧?不是固定长度的就用VARCHAR!大于100的VARCHAR也是几乎用不到的——比这更大的用TEXT就好了。TINYTEXT,最大长度为255,占用空间也是(实际长度+1);TEXT,最大长度65535,占用空间是(实际长度+2);MEDIUMTEXT,最大长度16777215,占用空间是(实际长度+3);LONGTEXT,最大长度4294967295,占用空间是(实际长度+4)。为什么“+1”?“+2”?“+3”?“+4”?你要是还不知道就该打PP了。这些可以用在论坛啊、新闻啊,什么的,用来保存文章的正文。根据实际情况的不同,选择从小到大的不同类型。

      四、枚举和集合类型。
      枚举(ENUM)类型,最多可以定义65535种不同的字符串从中做出选择,只能并且必须选择其中一种,占用存储空间是一个或两个字节,由枚举值的数目决定;集合(SET)类型,最多可以有64个成员,可以选择其中的零个到不限定的多个,占用存储空间是一个到八个字节,由集合可能的成员数目决定。
      举个例子来说,在SQLServer中,你可以节约到用一个Bit类型来表示性别(男/女),但MySQL没有Bit,用TINTINT?不,可以用ENUM('帅哥','美眉')!只有两种选择,所以只需一个字节——跟TINYINT一样大,但却可以直接用字符串'帅哥'和'美眉'来存取。真是太方便啦!

      好了,MySQL的数据类型介绍得差不多,我的建库策略也随着介绍数据类型介绍给大家一些。但这只是其中一部分,篇幅有限,不能再细说;其他的,就靠各人在对数据类型理解的基础上,多多实践、多多讨论。

    PHPAdmin的安装和配置

    其实phpadmin就是一个产品,用于管理mysql数据库的,毕竟很多数据库服务器不能够公开连接,所以只能够使用http的方式来进行连接管理。
    下载phpadmin( http://xj-http.skycn.net:8181/down/phpMyAdmin-2.6.1-rc2.zip)解压到apache能够访问的一个目录中(首先apache和php已经集成好了,能够浏览php页面)。运行访问index.php会出现一些提示情况。如果你的mysql安全设置不错的话,可能默认情况下是不能够连接到你的服务器的,需要修改一些配置信息。
    修改phpadmin/config.inc.php文件,其中主要是对mysql连接方式,连接路径以及用户名密码的设置。
    修改如下:
    $cfg['PmaAbsoluteUri'] = 'http://localhost/phpadmin/';
     
    $cfg['PmaAbsoluteUri_DisableWarning'] = TRUE;
    $cfg['blowfish_secret'] = 'admin';
    $cfg['Servers'][$i]['port']          = '';          // MySQL port - leave blank for default port
    $cfg['Servers'][$i]['socket']        = '';          // Path to the socket - leave blank for default socket
    $cfg['Servers'][$i]['connect_type']  = 'tcp';       // How to connect to MySQL server ('tcp' or 'socket')
    $cfg['Servers'][$i]['extension']     = 'mysql';     // The php MySQL extension to use ('mysql' or 'mysqli')
    $cfg['Servers'][$i]['compress']      = FALSE;       // Use compressed protocol for the MySQL connection
                                                        // (requires PHP >= 4.3.0)
    $cfg['Servers'][$i]['controluser']   = '';          // MySQL control user settings
                                                        // (this user must have read-only
    $cfg['Servers'][$i]['controlpass']   = '';          // access to the "mysql/user"
                                                        // and "mysql/db" tables).
                                                        // The controluser is also
                                                        // used for all relational
                                                        // features (pmadb)
    $cfg['Servers'][$i]['auth_type']     = 'cookie';    // Authentication method (config, http or cookie based)?
    $cfg['Servers'][$i]['user']          = '';      // MySQL user
    $cfg['Servers'][$i]['password']      = '';          // MySQL password (only needed

    其中比较重要的几个参数意义:
    'PmaAbsoluteUri' phpadmin的全路径,如果在apache中设定了一个alias的话就使用这个了


    'PmaAbsoluteUri_DisableWarning' 这个好像是用于取消警告的,经常安装好了在访问的页面上面会出现一些红色字体的警告(安全等等),如果设置成为true就不出现了


    'blowfish_secret' 这个是如果授权方式设置成为cookie的话就会使用这个来进行加密存入到cookie中的用户名和密码


    'auth_type' 用于设置登陆方式,config是直接从这个文件中获取user/password然后连接数据库,http则是在客户端访问的时候会弹出一个输入用户名密码的框进行认证处理 cookie则是通过页面输入用户名密码进行连接。其中config的安全等级最低,cookie的等级最高,不过如果禁用了cookie则无法使用cookie的方式进行认证。


    通常设置成为cookie的方式以后要在apache的httpd.conf文件中修改对应的配置:


    #added for phpmyadmin
    Alias /phpadmin/ "website/phpMyAdmin-2.6.1-rc2/"
    #php_admin_flag engine on 
    #php_admin_flag safe_mode off 

    DirectoryIndex index.php 
    Options Indexes MultiViews 
    AllowOverride None 
    order allow,deny 
    Allow from all 
    #php_admin_flag engine on 
    #php_admin_flag safe_mode off 
    #php_admin_value open_basedir none 
    #php_admin_value open_basedir "website/phpMyAdmin-2.6.1-rc2/" 



    当然主要是设置访问权限和别名 
    July 26

    printf

    我快崩溃了
    一个printf里面的参数那么麻烦
    一大堆的%参数要记,烦不烦啊,难怪现在的年轻人都不喜欢学习陈旧的东西
    July 24

    初识delphi

    今天才知道,原来俺们那本黄皮操作系统书上后面pv操作用的是delphi写的,假期计划稍微改变一下,准备看一下c和delphi,说老实话这两个语言满诡异的,说不定将来派得上用场
    操作系统重修拿了80分,huhu,轻松了