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。