MySQL学习笔记(三)

学习地址 p8-p13

建表过程与字符类型意义

建表过程就相当于在A4纸上画表头的过程:声明字段
建表和列类型有什么关系:

  • 分析:A4纸是数据的存储空间,大小有限。请问:你准备给学号字段留多宽?给姓名字段留多宽?
  • 想要能够容纳放置的内容但又不浪费。
  • 储存同样的数据,不同的列类型,所占据的空间和效率是不一样的,这就是建表前要知道列类型的意义。
  • 故,重点:列类型的存储范围与占据的字节关系。

MySQL三大列类型

数值型
  • 整形:默认是有符号型
    • Tinyint:1字节,-128-127,0-255
    • Smallint:2字节,-32768-32767,0-65535
    • Mediuint:3字节,-8388608-8388607,0-16777215
    • Int:4字节,-2147483648-2147483647,0-4294967295
    • bigint:8字节,-9223372036854775808-9223372036854775807,0-18446744073709551615
    • M、unsigned、zerofill意义:声明时在列类型后面加unsigned表示其为无符号类型,zerofill表示位数不够时用0填充,M表示补0宽度,和zerofill配合使用才有意义。
  • 小数(浮点型/定点型)
    • Float(M,D):M叫“精度”,代表总位数;D是“标度”,代表小数点后几位
    • decimal(M,D):定点型将整数部分和小数部分分开存储,比float精确(0.23与0.25)。
字符串型:M限制的是字符不是字节
  • Char(M):定长字符串(0<=M<=255),方便计算文件指针偏移量,磁盘查找效率更优。如果不够长度用空格在尾部补齐,如果本身右侧有空格会丢失,读出时右侧所有空格被清除。
  • Varchar(M):变长字符串(0<=M<=65535),列内容前有1-2个字节前缀来标记实际内容长度。
  • Text:文本类型,可以存储较大的文本段,搜索速度稍慢,不用加默认值(加了也没用) ,一般用来存储文章内容、新闻内容等。
  • Blob:二进制类型,用来存储图像、音频等二进制信息,防止因字符集问题导致信息丢失。
日期时间类型
  • Date日期:3个字节,格式YYYY-MM-DD,1000-01-01~9999-12-31
  • Time 时间:3个字节,HH:MM:SS,-838:59:59’和838:59:59‘
  • Datetime日期时间:8个字节,YYYY-MM-DD HH:MM:SS,1000-01-01 00:00:00~9999-12-31 23:59:59
  • Year 年类型:1个字节,YYYY和YY,1901-2155

终端下显示时间日期
  • date:显示日期时间
  • cal:显示本月第几天,-y显示本年第几天

ERROR 1366问题:
  • 错误原因,客户端没有声明字符集