一、选择合适的数据类型
(2)对于innodb表,尽量使用varchar。
可以使用MD5(),SHA1(),CRC32()等来生成散列值。比如
create table t(id varchar(100), context blob, hash_value varchar(40));
insert into t values(1, repeate('beijing',2), md5(context)),
(2, repeate('beijing',200), md5(context)),
(100, repeate('helloworld',20), md5(context));
select * from t where hash_value=md5(repeat('beijing', 2));
select * from t where context='hello%'。
(4)要注意浮点数中一些特殊值的处理
(3)如果记录的日期需要让不同时区的用户使用,最好使用TIMESTAMP,因为TIMESTAMP和实际时区匹配
二、 mysql中的字符集
常用字符集比较:
| 字符集 | 是否定长 | 编码方式 | 其他说明 |
|---|---|---|---|
| ASCII | 是 | 单字节7位编码 | 最早的奠基性字符 |
| IOS-8859-1/latin1 | 是 | 单字节8位编码 | 西欧字符集 |
| GB2312 | 是 | 双字节编码 | 早期标准,不推荐使用 |
| GBK | 是 | 双字节编码 | 不少系统支持 |
| GB18030 | 否 | 2字节或4字节编码 | 开始有一些支持,但数据库不常见 |
| UTF-32 | 是 | 四字节编码 | UCS-4原始编码,现在很少使用 |
| UCS-2 | 是 | 2字节编码 | |
| UTF-16 | 否 | 2字节或4字节编码 | java和windows xp/nt等内部使用 |
| UTF-8 | 否 | 1~4字节编码 | 互联网和unix/linux广泛支持的unicode字符集 |
其中,GBK每个汉字占用2个字节,而UTF-8每个汉字占用3个字节。