赞
踩
1 char、varchar都可以指定最大的字符长度,但text不可以.
2 数据的检索效率是:char > varchar > text
char:
CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充)
varchar:
varchar(5):字段只允许最多5个字符或者5个汉字,只表示个数,不是表示字节,字符空间,但可算出字节=5*3=15个字节(utf8编码下,下面有讲到)。
存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
text:
存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值
tinyint:
范围:-128-127(-2⁷-1~2⁷-1),与int(m)一样,m不起作用。
int:
int(1)、int(4)、int(11)和int(110)表示意思是一样的。括号里的值不同没有任何区别 范围:-2³¹-1~2³¹-1 (负21亿到正21亿)-2147483648-2147483647
float:
float(7,3):字段总允许宽度为7,其中整数部分为4位(数值范围可在0-9999),小数部分为3位(数值范围可在0-999)不可再次手动在navicat中此字段所在数据行的所有字段值也不可手动删除这条记录,但可通过sql修改
double:
double(7,3):字段总允许总长度为7,其中整数部分为4位(数值范围可在0-9999),小数部分为3位(数值范围可在0-999)
可手动在navicat中改此字段及同数据行其他字段的值,也可通过sql修改。
date: 日期
time: 时间
timestamp: 日期 时间
上面三个时间都是在java.sql包下的。都是java.util.Date的子类。
Timestamp.valueof(str)
simpledateformat
对字符时间和相应类型进行转换。
把当前时间转成timestamp类型 插入到数据库中。其中数据库中为datetime类型。
//可以这样去解决
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(new Date());
user.setCreatetime(Timestamp.valueOf(format));
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")---定义好时间的格式。
注意,JDBC接口中用java.sql.Date类型的时间。
其它层如UI层,service业务层用java.util.Date类型的时间。
利用多态,表面上要一个util.Date,实际传一个它的子类sql.Date.
因此往往要进行转换java.sql.Date date = new java.sql.Date(new Date().getTime());
#表t_users中dd字段可以设计为int 或者tinyint,如果赋值true自动转为1,如果赋值false自动转为0
update t_users set dd=false where id=3
结论:
1、经常变化的字段用varchar;
2、知道固定长度的用char;
3、超过255字节的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表,原因请考 优化InnoDB表BLOB,TEXT列的存储效率
在使用UTF8字符集的时候,MySQL手册上是这样描述的:
基本拉丁字母、数字和标点符号使用一个字节;
大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;
韩语、中文和日本象形文字使用三个字节序列。
即 一个汉字占多少长度与编码有关:
utf8/utf8mb4:一个汉字 = 3个字节,英文是一个字节
gbk: 一个汉字 = 2个字节,英文是一个字节
select length(str)
MySQL检查长度,可用SQL语言 SELECT LENGTH(fieldname) FROM tablename 这个命令可以看到各行使用的字节数。
#创建专业表
CREATE TABLE Speciality(
id INT PRIMARY KEY AUTO_INCREMENT,
SpecialName VARCHAR(20) UNIQUE NOT NULL
)CHARSET=utf8;
#创建课程表(课程表的SpecialId 引用专业表的 id)
CREATE TABLE subject(
subjectId INT PRIMARY KEY AUTO_INCREMENT,
subjectName VARCHAR(20) UNIQUE NOT NULL,
subjectHours INT DEFAULT 20,
specialId INT NOT NULL,
CONSTRAINT fk_subject_specialId FOREIGN KEY(specialId) REFERENCES Speciality(id) #引用专业表里的 id 作为外键,新增课程信息时,约束课程所属的专业。
)charset=utf8;
SELECT * from t_employees e INNER JOIN t_departments d ON e.DEPARTMENT_ID=d.DEPARTMENT_ID;
SELECT * from t_employees e,t_departments d where e.DEPARTMENT_ID=d.DEPARTMENT_ID;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。