麦田守望者's profile异想空间PhotosBlogLists Tools Help

Blog


    3/14/2008

    PostgreSQL处理varchar和char的独到之处

    在PostgreSQL中,varchar(n)和char(n)是character varying(n)和character(n)的别名。对于这两种字符类型数据的处理性能与其他某些数据库不同,在PostgreSQL中,没有任何的差别。如果在应用过程中出现性能差别的话,应该从具体应用出发进行分析。
    在声明列类型的时候,可以直接写varchar。这样使得列能够包含任意多的字符数。此种行为不是SQL标准,是PostgreSQL的扩展。类似的行为也出现在SQL Server 2005中。
    3/7/2008

    原来,在列定义中写上NULL不是SQL标准

    NOT NULL是一个约束,出现在列(不同数据库产品有其自己的叫法)定义中。它不同于其他的SQL约束,无法给一个NOT NULL约束命名,或者在表级别定义属于表的约束。相反,我们也可以定义NULL,使得列能够存储NULL值。但是,在列定义中写上NULL不属于SQL标准!
    3/4/2008

    在psycopg2和MySQLdb中处理中文

    在psycopg2和MySQLdb中能够很好的处理中文。
    先说psycopg2:
    首先,PostgreSQL服务器端应该使用UTF-8编码;接下来,在connect服务器之后,在SELECT任何数据之前,先执行命令:
      SET CLIENT_ENCODING TO gbk
    然后,可以执行SELECT读取数据。psycopg2以字节串的形式返回包含中文的字符串。
    再说MySQLdb:
    在创建到MySQL的连接对象的时候,给MySQLdb的connect方法传入charset参数:
      cn = MySQLdb.connect(db='mydb', host='localhost', user='root', passwd='mypassword', charset='gbk')
    MySQLdb以Unicode字符串对象返回包含中文的字符串。
    运行环境:Python 2.4.4