mysql将latin1编码更换为utf-8编码

同事反馈,我们下载软件页面出现了乱码,抽个时间查看一下。我们在bluehost服务器数据库原来是mysql4,换到新的服务器上,安装的是mysql5,这样mysql4 默认的latin1编码显示就出现了乱码。

搜索一下,网上盛传的一篇文章是《Mysql latin1编码转UTF8的方法
试了许久,不成功,继续搜,发现这《mysql移置之将latin1编码更换为utf-8编码》 解决了,解说的比较到位。
这文章后面导入的是gbk,我们的服务器需要是utf8,于是,总的就是输入三条命令:

mysqldump --default-character-set=latin1 --create-options=false --set-charset=false -u root -p 数据库名 > market.sql
create database 数据库名 CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql -u root -p --default-character-set=utf8 数据库名 < ~/数据库名.sql

问题解决了。

再说说代码风格

老掉牙的话题了,晚上bb给我发一段 php代码,别人写的taobao api,要修改一下cache,我看了,头都大了,代码缩进tab与空格并用,导致我用vim打开很乱。一般,代码写得很糟糕的,我都拒绝看,老朋友嘛,硬着头皮看看,用indent对齐一下,还算好。再看一些函数的命名,我又晕了一把。比如
public function SendCheng ($mode = 'GET',$format = 'xml')
还真的看不明白是什么意思。

在小的软件公司,很多新员工来上班第一天,领导拷贝一堆pdf技术文档给你自个儿看,公司压根儿没编码规范的文档,祸害从此开始。从另一个侧面来说,作为一个程序员,自己也有责任去看《程序设计实践》,网上流传的《华为编码规范》,林锐的《高质量C/C++编程指南》等。千万不要搞什么像Button1, Button2, Button3, xingbie(性别), jifen(积分, 这个的命名方式,害人害己。美工A进公司时也已经工作3年了,网页与图片都是随便的001.html, 002.html, 003.index,不明白是什么意思。我问她为什么不给它们起个有意思的名字,比如一张表示团队的图片,teamwork,jpg 与001.jpg,谁更容易管理,更容易让搜索引擎找到?她说以前没人要求她这么做过,文件随意放,老师没教过要这样做的。再者,搞网站3年,竟然不知道什么是w3c,我真的感到悲哀,同时也为我自己感到悲哀,没有做这方面的测试,以为这是基本的知识,大家都知道了。

良好的代码风格,是一个程序员的基本修养。

Broncho网站访问速度优化

前些时候,据网友反应,Broncho论坛访问很慢,开始觉得服务器在美国,慢是正常的,加上其他事情多,也没在意。昨晚在宿舍打开了 bbs.broncho.cn,超过了30秒还没显示,不耐烦。听说eoe android 的网站也搬到了美国,对比测试一下,eoe访问速度比broncho快多了,于是今天计划优化一下。网站流量比较小,就一台主机,没计划做cache,更谈不上CDN了,于是只好做一些小局部优化。

优化原则,当然是Yahoo的 Best Practices for Speeding Up Your Web Site
Yahoo的做法甚至是有些“变态”了,我还发现有其他更变态的优化 :(
首先,用雅虎的YSlow工具测试一下,看看瓶颈在哪,才好下手。YSlow是一个Firefox插件,这个插件依赖于Firebug插件,web开发人员对后一个大家应该很熟悉了。

1. 服务器端apache使用mod_deflate压缩页面

我们服务器是fedora 8,自带的apache也早装有mod_deflate,在http.conf配置文件添加以下内容即可。

<IfModule mod_deflate.c>
	DeflateCompressionLevel 7
	AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
	AddOutputFilter DEFLATE css js
</IfModule>

在http://www.whatsmyip.org/http_compression/页面测试,结果如下:

http://bbs.broncho.cn is gzipped

Original Size: 73.51 KB
Gzipped Size: 16.64 KB
Data Savings: 77.36%

效果非常明显。还有一个网站http://www.port80software.com/products/httpzip/compresscheck 它的作用是检测你的网站是否被压缩,以及压缩比率等。 用firefox与chrome分别打开broncho论坛,firefox显得有点慢,chrome哇啦哇啦的页面就显示了,chrome不愧号称速度是最快的浏览器。

2. 配置 Apache Etag
用Apache的mod_expires 模块来设置。

<IfModule mod_expires.c>
        <filesmatch "\.(jpg|gif|png|css|js)$">
                ExpiresActive on
                ExpiresDefault "access plus 2 month"
        </filesmatch>
</IfModule>

加上这个后,broncho.cn首页的Grade由C升到B,Overall performance score由79变为88!,好吉利的数字,我喜欢!

3. 合并压缩 css,javascript文件
在broncho首页,有两个css
<link href="/css/broncho_v1.css" rel="stylesheet" type="text/css" />

<link href="/css/inlay.css" rel="stylesheet" type="text/css" />
于是把他们合并在一起,以减少 http 请求次数。

有一个css在线压缩工具:

http://www.cssdrive.com/index.php/main/csscompressor

压缩后,可以选择把注释去掉,大概是这样:
html{background:#ccc; font-size:13px; margin:0}
body{margin:0; font-family:Arial; color:#333; background:url(/images/android2-bg.gif) center repeat-y}
div.body-wide{background:#fff; width:100%}

就是每个标签的属性,都写在同一行上,有的公司就要求这样。我还是坚持这样的风格:

/* $Id: broncho_v1.css 215 2010-02-01 09:06:21Z deli $ */

html {
	background:#ccc;
	font-size:13px;
	margin:0;
}
body {
	margin:0;
	font-family:Arial;
	color:#333;
	background:url(/images/android2-bg.gif) center repeat-y;
}
div.body-wide {
	background:#fff;
	width:100%;
}

主要考虑维护修改方便,不好之处就是每修改一次,都得重新压缩一次。JavaScript用YUI Compressor压缩。

4. 减小 html页面
用tab键进行代码缩进,以节约代码大小,这个可能比较变态。
用2个空格缩进的index.html:
[deli@athena html]$ ll index.html
-rw-rw-r–. 1 deli deli 5816 2010-06-22 10:40 index.html

替换为tab之后的index.html:
[deli@athena html]$ ll index.html
-rw-rw-r–. 1 deli deli 5342 2010-06-22 11:08 index.html
index.html文件本身就比较小,大约减少0.5K这样,效果不是很显著。

5. phpbb论坛优化
broncho论坛采用 phpbb,前段时间对w3c鬼迷心窍,为了使得firefox右下角 Html Validator大红叉去掉,把一些插件的@import 全部写到了overall_header.html,这样首页都要把这些css,js全部加载,装七七八八的插件都堆在overall_header.html,自然会变慢。作为折衷考虑,只好把这些js,css放在真正需要的页面。

phpbb本身确实没什么大的优化了,模板解析,sql查询,都放在cache里,如果可以优化的话,phpbb的开发人员早就把这个问题搞定。记得之前做过CDN,服务器内存都是4G以上,以空间换时间,把很多文件映射的内存中,所以也试试用tmpfs来存放phpbb的 cache,php session。

#phpbb cache:
mkdir /dev/shm/cache
chmod 1777 /dev/shm/cache/
mount --bind /dev/shm/cache/ /var/www/html/forum/cache/

#php session:
mkdir /dev/shm/session
chmod 1777 /dev/shm/session/
mount --bin /dev/shm/session/ /var/lib/php/session/ 

6. 其他杂项
* img使用 width 和 height 属性来定义图像尺寸,以便图像被更快地显示。
* 网址后加斜杠

参考:
1.《如何提高网站访问速度 从30秒到3秒的改变》,不知道作者是谁,大家可以搜索一下。
2. oasisfeng phpBB论坛优化拾零
3. Apache Cache Last-Modified、Expires和Etag相关工作原理

Apache+MySQL+PHP绿色集成安装包InstantRails

官方网站 http://rubyforge.org/projects/instantrails/ 是这样介绍的:
Instant Rails is a one-stop Rails runtime solution containing Ruby, Rails, Apache, and MySQL, all pre-configured and ready to run. No installer, you simply drop it into the directory of your choice and run it. It does not modify your system environment.
InstantRails是运行在Windows环境下,包括了
Apache
PHP
MySQL/PhpMyAdmin
Ruby/Rails
无疑,InstantRails本来是用来开发ruby on rails的,不过里面也集成了php,对PHPer也是
不错的选择。
  1. 下载最新的版本的压缩包.Zip, 当前版本是 2.0。
  2. 解压 InstantRails-2.0-win.zip 到 D:/InstantRails
  3. 运行 instantrails.exe.
  4. 在下一个提示框点 yes / yes ,自动配置.
到此,Apache + PHP + MySQL / PhpMyAdmin 就启动好了,很傻瓜,非常的实用。
注意: 如果要打开 gd库支持:
  1. 在 D:/InstantRails/apache. 打开php.ini
  2. 找到这一行, extension = php_gd2.dll
  3. 删除前面的分号,把注释去掉。
  4. 重启apache ,即在右下角点红色”I”字形的 InstantRails图标,点“Restart Servers”。