爬虫之MySQL数据库使用规范
一.定义规范
- 1.库名、表名、字段名使用小写字母(最好是英文),用_做分割。
- 2.库名、表名、字段名要有中文注释,方便理解。
- 3.库名、表名、字段名见名知意,建议使用名词而不是动词。
- 4.表必须要有主键,最好符合三范式建表。
- 5.存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。
- 6.临时表用tmp开头,线下表爬虫表用ods_crawl开头,比喻爬航班用ods_crawl_flight,爬阿里巴巴用ods_crawl_alibaba。
- 7.整形定义中不添加长度,比如使用INT,而不是INT(4)。
- 8.尽可能不使用TEXT、BLOB类型。
- 9.建表三范式:
1NF:一个table中的列是不可再分的(即列的原子性)
2NF:一个table中的行是可以唯一标示的,(即table中的行是不可以有重复的)
3NF:一个table中列不依赖以另一个table中的非主键的列!
二.存储规范
-
1.VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。
-
2.VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。
-
3.表字符集选择UTF8,防止数据乱码。
-
4.存储年月使用int类型。
-
5.存储日期使用DATE类型。
-
6.存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。
三.遇到的问题
1.timestamp
-
从MySQL5.7开始使用严格模式,当一张表的定义有多个timestamp字段时,第二个字段会默认为 ’0000-00-00 00:00:00‘格式,但是该模式下不允许使用这种格式的时间,因此会出现以下报错:
Invalid default value for 'timestamp'
-
解决办法: 输入MySQL命令:
SET GLOBAL sql_mode = '';