(1)Web乱码问题
动态网站由三部分构成:浏览器,Apache服务器(PHP),数据库服务器
解决方案:三码合一
(2)整数型
Tinyint:一个字节 ,127/255;
Smallint:2个字节,32767/65536;
Mediumint:3个字节,8388607/16777215;
Int :2147483647/4294967295
Bigint:8个字节
zerofill 0填充
(3)int(4) 如果不够,4位,前面用0填充,保证数据格式
(4)校对集问题
校对集:数据的比较方式
校对集有三种格式
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写
_cs:case sensitive,大小写敏感,区分大小写
_ci;case insensitice,不区分大小写
(5) show collation;
只有比较的时候才会生效
必须在没有数据前声明好,有数据后修改无效
(6)网站是以PHP未实现的主要操作对象:PHP中有非常强大的时间日期处理函数:date,只需要一个时间戳就可以转换成任意类型的时间;以PHP为主的时候,都是在数据库使用时间戳(整型)来存储时间;
一个字符可能占用多个字节,这由编码和存放的字符决定。比如UTF8(一种变长的unicode编码)中,一般一个汉字占据3个字节,一个英文字母占据一个字节
(7)字符串类型
1.定长字符串: char; 磁盘在定义结构的时候,就已经确定了最终数据的存储长度
char(L):L代表可以存储的长度,单位为字符
2.变长字符串: varchar; 在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少,是根据具体的数据来确定
varchar(L): L 表示字符长度 一般会多存1到2个字节来确定存储的实际长度
3.如果数据量非常大,超过255 个字符就会使用文本字符串
Text:存储文字
Blob:存储二进制数据(一般不用)
(8)枚举字符串
枚举:enum,事先将所有可能出现的结果,都设计好,实际上存储的数据必须是规定好的数据
(1.规范数据格式,2.节省存储空间)
(9)集合字符串
集合跟枚举很类似:实际存储的是数值,而不是字符串
(10)MySQL记录中:如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(若想释放NULL所占用的字节,必须保证所有的字段都不允许为空)
(11)MySQL中text文本字符串,不占用记录长度:额外存储。但是text文本字符串也是属于记录的一部分:一定需要占据记录中的部分长度:10 个字节;(保存数据的地址及长度)
(12)列属性:
真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。
NULL(默认的,应该尽可能保证数据不为空)
NOT NULL
unique key
auto_increment
(13)默认值:Default
一对多:一张表最后那个有一条记录可以对应另外一张表中的多条记录,另外一张表的一条记录只能对应第一张表的一条记录
(14)关系
将实体与实体的关系反映到数据表的设计上
一对一:一张表的一条记录一定只能与另一张表的一条记录进行对应
一对多:一张表中有一条记录可以对应另一张表的多条记录
多对多:一张A表中的一条记录能够对应B表中的多条记录,同时B表中的一条记录也对应A表中的多条记录(新增一张表,维护两个表的关系)
范式:normal format 是为了解决数据的存储与优化的问题,为了减少数据的冗长。若要满足下一层,必须满足上一层,并不是强制规范
1NF(第一范式):要求字段的数据具有原子性:不可再分
2NF(第二范式):数据表的设计过程中,有复合主键(多字段主键),且表中有字段并不是由整个主键来确定,而是依赖主键中的某个字段:存在字段依赖主键的部分的问题。
3NF(第三范式):解决传递依赖的问题
(15)rand() 取一个0-1之间的一个随机数