NingG +

MySQL 基础:字段类型与适用场景

1. 杂谈

几点:

2. 类型属性

2 个类型属性:

2.1. UNSIGNED,无符号

几点:

2.2. ZEROFILL,0填充

几点:

3. SQL_MODE 设置

通常为空,可以查看 global、session两种环境中 sql_mode 的设置:

通过如下命令,进行sql_mode的设置:

非严格模式是,会允许一些非法操作,例如:NULL插入到NOT NULL字段,因此通常建议使用严格模式,严格模式:sql_mode 为 strict_trans_tables 或者 strict_all_tables;

sql_mode可以设置的选项:

sql_mode有简写形式:

疑问:

如何为sql_mode中添加多个选项?Re:在 SET GLOBAL sql_mode时,设置的值为多个选项的逗号(,)拼接

4. 日期和时间类型

MySQL中有 5 种与日期和时间相关的类型:

4.1. DATETIME & DATE

关于对秒后小数的支持情况:

4.2. TIMESTAMP

timestamp & datetime 不同之处:

4.3. YEAR & TIME

TIME类型占用3字节,显示的范围为“-838:59:59”~“838:59:59”。有人会奇怪为什么TIME类型的时间可以大于23。因为TIME类型不仅可以用来保存一天中的时间,也可以用来保存时间间隔,同时这也解释了为什么TIME类型也可以存在负值。和DATETIME类型一样,TIME类型同样可以显示微秒时间,但是在插入时,数据库同样会进行截断操作。

4.4. 日期、时间相关的函数

NOWCURRENT_TIMESTAMPSYSDATE 差异:

5. 数值类型

5.1. 整型

常用的几种整型字段类型:

5.2. 浮点型(非精确类型)

MySQL数据库支持两种浮点类型:单精度的FLOAT类型及双精度的DOUBLE PRECISION类型。这两种类型都是非精确的类型,经过一些操作后并不能保证运算的正确性,例如M*G/G不一定等于M,虽然数据库内部算法已经使其尽可能的正确,但是结果还会有偏差。

注:

FLOAT、DOUBLE PRECISION,浮点类型,非精确。

5.3. 高精度类型

DECIMAL和NUMERIC类型在MySQL中被视为相同的类型,用于保存必须为确切精度的值,举例:

salary DECIMAL(5,2)

在上述例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。在MySQL 5.5中M的默认值是10.

5.4. 位类型

位类型,即BIT数据类型可用来保存位字段的值。BIT(M)类型表示允许存储M位数值,M范围为1到64,占用的空间为(M+7)/8字节。如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。例如,为BIT(6)列分配一个值b’101’,其效果与分配b’000101’相同。要指定位值,可以使用b’value’符,例如:

mysql> CREATE TABLE t ( a BIT(4));
mysql> INSERT INTO t SELECT b'1000';

但是直接用SELECT进行查看会出现如下情况:

mysql> SELECT * FROM t;

这个值似乎是空的,其实不然,因为采用位的存储方式,所以不能直接查看,可能需要做类似如下的转化:

mysql> SELECT HEX(a) FROM t;

6. 字符类型(todo)

6.1. 字符集

建议使用utf8,方便进行国际化。

Unicode vs. utf8

实践

int相关

在MySQL中 int 的 最大值可以看成 2 个:

类型 字节 最小值 最大值
    (带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
    0 255
SMALLINT 2 -32768 32767
    0 65535
MEDIUMINT 3 -8388608 8388607
    0 16777215
INT 4 -2147483648 2147483647
    0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
    0 18446744073709551615

补充:

int类型为4字节,那int(5)的含义是什么?实际上int(5)与字段值的范围无关,仅表示显示效果。参考:详解mysql int类型的长度值问题

date、datetime、timestamp

几点:

todo:

参考来源

原文地址:https://ningg.top/basic-mysql-field-type/
微信公众号 ningg, 联系我

同类文章:

微信搜索: 公众号 ningg, 联系我, 交个朋友.

Top