暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 的索引数据结构

原创 Mrzhang 2023-07-07
163


Mysql

基础

大小写

windows下不区分大小写linux下database名,table名区分大小写,column名不区分;

oracle:不区分大小写,全是大写 ORACLE 中 " "的作用是强制区分大小写

ORACLE在建表或者字段时,如果没有双引号,ORACLE会把表名、字段名全部转化为大写字母然后写入数据字典。访问数据字典时,没有双引号ORACLE会将其转化成大写然后再去数据字段中查找。如果加上双引号则能区分大小写。不仅仅关键字不区分大小写,函数名,过程名,表名称,pl/sql块中变量名,用户名,密码等都不区分大小写。

所以在ORACLE中,还是建议全部用大写

数据类型

分类

类型

M

UNSIGNED

ZEROFILL

范围

说明

bit

yes

no

no

1~64b

bit(2)表示2个二进制位,取值范围0~3

tinyint

yes

yes

yes

1B

-2^(1*8-1)+1 ~ 2^(1*8-1)

即-127~128

smallint

yes

yes

yes

2B

同上

mediumint

yes

yes

yes

3B

同上

int

yes

yes

yes

4B

同上,范围-2^(4*8-1)+1 ~ 2^(4*8-1)

integer

yes

yes

yes

4B

与int完全相同

bigint/long

yes

yes

yes

8B

同上-2^(8*8-1)+1 ~ 2^(8*8-1)

char

yes

no

no

255B

固定长度字符串类型。char(4),当数据长度为2时,会在后面添加2个空格补位。

varchar

yes

no

no

65535B

可变长度字符串。varchar(4),当数据长度为2时,不会添加空格补位。占3个字节,其中一个字节用来记录长度。当数据长度大于255时,记录长度就需要2个字节了。

tinytext

yes

no

no

28--1B

可变长度字符串。

text

no

no

no

216-1B

同上。

mediumtext

no

no

no

224-1B

同上。

longtext

no

no

no

232-1B

同上。

binary

yes

no

no

255B

固定长度二进制类型。binary(10),当数据为5B时,会添加5B来补位。即长度为10B。

varbinary

yes

no

no

255B

可变长度二进制类型。varbinary(10),当数据为5B时,不会补位,长度为6B,其中1B用来记录长度。

tinyblob

no

no

no

28--1B(256B)

可变长度二进制类型。

blob

no

no

no

216-1B(64K)

同上

mediumblob

no

no

no

224-1B(16M)

同上

longblob

no

no

no

232-1B(4G)

同上

float

yes

yes

yes

±3.4E38

float(5,2)表示长度为5,其中2位小数。与Java中float精度相同!

double

yes

yes

yes

±1.79E308

同上。

numeric

yes

yes

yes

小数点前后有效位之和不大于65位。

使用与float、double相同,但存储方式不同,把9位十进制数压缩成4个字节来存储。相当与把浮点数当成字符来保存,但进行了压缩。比float、double更安全可靠。不会出现精度缺失的问题。

decimal

yes

yes

yes

65位

在MySQL中decimal与numeric是完全相同的。二者在表示钱时,很有用。

bool

no

no

no

no

表示布尔值,但真实上是使用tinyint(1)表示的。当值为0时表示假,当值为非0时表示真。-128也是真。

boolean

no

no

no

no

与bool完全相同。


date

no

no

no

no

yyyy-mm-dd

datetime

no

no

no

no

datetime以 8 个字节储存。yyyy-mm-dd hh:mm:ss

timestamp

yes

no

no

no

timestamp 只占 4 个字节。时间戳,用在记录插入与更新自动记录时间。

year

yes

no

no

no

year(2),表示两位的年

time

no

no

no

no

只表示时间

varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符。

一个汉字占多少长度与编码有关:UTF-8:一个汉字=3个字节;GBK:一个汉字=2个字节。比如varchar(10)类型的字段,UTF-8的汉字,只能存3个,gbk字符集的汉字却能存5个。

Varchar ,varchar2,char 区别?

区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 
2.CHAR的效率比VARCHAR2的效率稍高。 
3. 目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

Datetime,timestamp 区别?

timestamp 只占 4 个字节,而且是以utc的格式储存, 它会自动检索当前时区并进行转换。

datetime以 8 个字节储存,不会进行时区的检索.

也就是说,对于timestamp来说,如果储存时的时区和检索时的时区不一样,那么拿出来的数据也不一样。对于datetime来说,存什么拿到的就是什么。

还有一个区别就是如果存进去的是NULL,timestamp会自动储存当前时间,而 datetime会储存 NULL。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论