TurboGears开发笔记 (1)

1. 使用MySQL数据库

1.1 使用UTF-8字符集

sqlobject.dburi="mysql://root:@localhost:3306/dbname?sqlobject_encoding=utf-8&read_default_file=my.cnf"

同时,my.cnf里在client一节加入 default-character-set = utf8

1.2 使用InnoDB类型的表
修改my.cnf,mysqld一节加入 default-storage-engine=INNODB

1.3 自身外键关联
使用InnoDB类型的表,tg-admin sql drop 时会遇到由于外键约束而无法删除的问题,可以改用MyISAM类型的表。tg-admin sql create时会有警告:

Warning: a circular reference was detected in the model. Unable to sort the classes by dependency: they will be treated in alphabetic order. This may or may not work depending on your database backend. The error was:
Found a circular reference: ......

2. SQLObject

2.1 MultipleJoin最好指定joinColumn

3. Kid模板

3.1 用defined(varname) 可以判断一个变量是否存在于模板中,value_of则可以指定变量不存在时的默认值

3.2 results.count()可以得到查询结果集的大小

3.3 根据条件输出不同的内容 ${condition and 'a' or 'b'}
比如交替表格中行的背景色

...

在select的option标签里输入selected属性

......

Windows下mysql命令行工具插入和显示中文数据

my.ini里client和mysqld都设置了default-character-set=utf8
数据库和表的默认字符集也都是utf8,用MySQL Query Browser工具插入和查询中文输入没有问题,但直接在命令提示符里用mysql工具插入和查询有中文乱码。

与 http://www.javaworld.com.tw/jute/post/view?bid=21&id=128513&sty=1&tpg=1&age=0 里说的一样,好像win下mysql命令行工具不认。

解决办法:
插入数据前,set names utf8;
执行查询前,set name gbk;

Windows XP下安装MySQL遇到的两个问题

原来的安装用的是直接解压zip包的方式,安装情况如下:
1. 安装目录为C:\mysql-4.1.22-win32
2. my.ini从my-medium.ini修改而来,放在了C:\WINDOWS下
3. 安装Windows服务用的命令是 mysqld-nt --install
4. net start MySQL启动服务没有问题

但用MySQL Administrator工具连接时总是先弹出一个对话框,报告

Either the server service or the configuration file could not be found. Startup variables and service section are therefore disalbed.

点“确定”后才进入主界面,正如它所说,Service Control和Startup Variables功能都被禁用了,界面上有红色的提示信息
This section is only available when connected to localhost.

换用msi安装包,重新安装MySQL,目录还是选择C:\mysql-4.1.22-win32(除了data目录之外,其他目录都已删除),最后配置实例时出现无法启动服务的问题。尝试逐个关闭my.ini中选项的方法,试验到底是那个选项导致不能启动。最后发现是innodb_log_file_size这个选项的问题。原来实际的log文件ib_logfile0和ib_logfile1的大小是5M,是由刚才的那个my.ini(即有zip包中my-medium.ini手工修改而来的)指定的,而现在的my.ini(由MySQL Server Instance Config Wizard生成)中同样的选项指定的却是17M,结果导致MySQL无法启动。解决办法是要么删除原来的那两个log文件,要么修改innodb_log_file_size。

现在可以正常启动MySQL服务,MySQL Administrator也可以正常使用。在注册表里查看MySQL Server Instance Config Wizard生成的MySQL服务,发现ImagePath的值是
C:\mysql-4.1.22-win32\bin\mysqld-nt --defaults-file=C:\mysql-4.1.22-win32\my.ini MySQL说明之前MySQL Administrator报错的原因是服务由mysqld-nt --install命令创建,导致它找不到my.ini。