+
| id1 | id2 |
+------------+-------+
| 0000000001 | 00001 |
+------------+-------+
1 row in set (0.00 sec)
--设置了宽度限制后,如果插入大于宽度限制的值,会不会截断或者插不进去报错?
答案:不会;
对插入的数据有任何影响,还是按照类型的实际精度进行保存。
这时,宽度格式实际已经没有意义,左边不会再填充任何的“0”字符。
--UNSIGNED:整型类型的可选属性之一
如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,
它的取值范围是正常值的下限取 0,上限取原值的 2 倍。
例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。
如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。
--AUTO_INCREMENT:整型类型的可选属性之一
在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。
--对于小数:浮点数和定点数
浮点数: float(单精度)和 double(双精度)
定点数:decimal不指定精度时,默认的整数位为 10,默认的小数位为 0。
MySQL 保存值时进行四舍五入
--浮点数如果不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;
--定点数如果不写精度和标度,则按照默认值 decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。
--BIT(M)
对于 BIT(位)类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M 范围从 1~
64,如果不写则默认为 1 位。对于位字段,直接使用 SELECT 命令将不会看到结果,可以用
bin()(显示为二进制格式)或者 hex()(显示为十六进制格式)函数进行读取。
example:
select bin(t_bit),hex(t_bit) from t_book;
--2.日期时间类型
这些数据类型的主要区别如下:
--1.如果要用来表示年月日,通常用 DATE 来表示。
--2.如果要用来表示年月日时分秒,通常用 DATETIME 表示。
--3.如果只用来表示时分秒,通常用 TIME 来表示。
--4.如果需要经常插入或者更新日期为当前系统时间,则通常使用 TIMESTAMP 来表示。
--5.TIMESTAMP 值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为 19 个字符。如果想要获得数字值,应在 TIMESTAMP 列添加+0。
--6.如果只是表示年份,可以用 YEAR 来表示,它比 DATE 占用更少的空间。YEAR 有 2 位或4 位格式的年。
--默认是 4 位格式。在 4 位格式中,允许的值是 1901~2155 和 0000。在
--2 位格式中,允许的值是 70~69,表示从 1970~2069 年。
--MySQL 以 YYYY 格式显示 YEAR值。
--TIMESTAMP
MySQL规定TIMESTAMP类型字段只能有一列的默认值为current_timestmap,如果强制修改,系统会报错.
TIMESTAMP还有一个特性是与时区有关:当插入日期时,会先转换为本地时区后存放;
而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。
这样,两个不同时区的用户看到的同一个日期可能是不一样的。
TIMESTAMP的取值范围为19700101080001到2038年的某一天,因此它不适合存放比较久远的日期;
可以往TIMESTAMP类型的字段插入一个很长的数字试试看
--查看当前时区
mysql> show variables like 'time_zone';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| time_zone | SYSTEM |
+---------------+--------+
1 row in set, 1 warning (0.01 sec)
--修改时区为东九区
mysql> set time_zone='+9:00';
--采用不同的格式将日期“2007-9-3 12:10:10”插入到 DATETIME列中
mysql> create table t6(dt datetime);
mysql> insert into t6 values('2007-9-3 12:10:10');
mysql> insert into t6 values('2007/9/3 12+10+10');
mysql> insert into t6 values('20070903121010');
mysql> insert into t6 values(20070903121010);
mysql> select * from t6;
--3.字符串类型
--1.CHAR 和 VARCHAR 类型
CHAR 列的长度固定为创建表时声明的长度,长度可以为从 0~255 的任何值;
而 VARCHAR 列中的值为可变长字符串,长度可以指定为 0~255 (5.0.3以前)或者 65535 (5.0.3以后)之间的值。
在检索的时候,CHAR 列删除了尾部的空格,而 VARCHAR 则保留这些空格。
example:
mysql> create table vc(v varchar(4),c char(4));
mysql> insert into vc values('ab ','ab ');
mysql> select length(v),length(c) from vc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
| 3 | 2 |
+-----------+-----------+
1 row in set (0.03 sec)
--2.BINARY 和 VARBINARY 类型
它们包含二进制字符串而不包含非二进制字符串
BINARY和VARBINARY的长度是字节长度而不是字符长度。
mysql> create table t(c binary(3));
mysql> insert into t set c = 'a';
mysql> select * ,hex(c),c='a',c='a\0',c='a\0\0' from t;
+------+--------+-------+---------+-----------+
| c | hex(c) | c='a' | c='a\0' | c='a\0\0' |
+------+--------+-------+---------+-----------+
| a | 610000 | 0 | 0 | 1 |
+------+--------+-------+---------+-----------+
1 row in set (0.00 sec)
--3.ENUM (枚举)类型
ENUM 类型只允许从值集合中选取单个值,而不能一次取多个值
example:
mysql> create table t (gender enum('M','F'));
mysql> INSERT INTO t VALU