在上一篇关于数据库的文章中提到了UTF-8,不设置的话就会出现乱码,那么现在就来说一说 计算机是如何存储字符的。
-
如何存储英文字符
ASCII:对所有的英文字母及其符号进行了编码,总共有128个。 -
Latin -1:对欧洲的字符进行了编码,兼容ASCll,总共有256个。
-
如何存储中文字符呢
GB2312: 对常用的6千多汉字进行了编码,兼容ASCII
GBK: 对2万多的汉字进行了编码,兼容GB2312
BIG5: 台湾繁体字编码,兼容ASCII
Unicode: 对世界上主流国家的常用语言进行了编码,不兼容GBK,BIG5…兼容ASCII,具体使用有3种存储方案utf-8 utf-16 utf-32
mysql默认使用latin-1,不包含汉字,这就是出现乱码的原因。
列类型
创建数据表的时候,指定的列所存储的数据类型
create table t1(
id 列类型
);
列类型分为哪几种
数值型
- tinyint 微整型,占1个字节,范围-128~127
- smallint 小整型,占2个字节,范围-32768~32767
- int 整型,占4个字节,范围 -2147483648~2147483647
- bigint 大整型,占8个字节.
- float 单精度浮点型,占4个字节,范围比int大的多,精度会受到影响
- double 双精度浮点型,占8个字节
- decimal(M,D) 定点小数,小数点不会发生变化,占16个字节,M代表总的有效位数,D代表小数点后的有效位数.
- boolean/bool 布尔型,用于存储只有两个值的数据,这两个值分别是true和false,在使用的时候自动转成了tinyint类型,true转为1,false转为0,也可以直接插入数值.
- 如果要使用true或者false不能添加引号,因为属于关键字。
日期时间型–必须加引号
- date 日期型 2020-12-25
- time 时间型 15:43:30
- datetime 日期时间型 2020-12-25 15:43:30
字符串型——必须加引号
varchar(M) 变长字符串,几乎不会产生空间浪费,操作速度相对慢,M的最大值65535,常用于存储变化长度的数据,例如标题,用户名,密码,详情等
char(M) 定长字符串,可能产生空间浪费,操作速度相对快,M的最大值255,常用于存储固定长度的数据,例如身份证号码,手机号码等
text(M) 大型变长字符串,M的最大值能达到2G
练习:使用合理的列类型,编写脚本文件02_xuezi.sql,先丢弃再创建数据库xuezi,设置编码为utf-8,进入数据库,创建保存商品数据的表laptop,包含有编号lid,标题title,价格price,库存量stockCount,上架时间shelfTime,是否为首页推荐商品isIndex,插入若干条数据。
//设置编码为utf-8
set names utf8;
//查看有没有xuezi数据库有的话将他丢弃
DROP DATABASE IF EXISTS xuezi;
//创建数据库学子 设置编码为utf8
CREATE DATABASE xuezi CHARSET= utf8;
//进入xuezi数据库
USE xuezi;
//创建表
CREATE TABLE laptop (
lid int,
title VARCHAR(30),
price DECIMAL(7,2),
stockcount SMALLINT,
shelfTime DATETIME,
islndex BOOLEAN
);
INSERT INTO laptop VALUES('31','小新Pro13高性能轻薄本 ','5399','500','2020-9-2 15:30:30',false);
INSERT INTO laptop VALUES('32','联想(Lenovo)','7999','200','2020-9-3 15:40:20',true);
INSERT INTO laptop VALUES('33','华为(Lenovo)','5000','200','2020-9-3 15:40:20',true);
SELECT * FROM laptop;