sql之数据类型
字符与字节区别
- 一个字符相当于两个字节,一个字节8位
什么叫精度
- 精度是指数的总长度
精度对应可存储字节数
精度 | 存储字节数 |
---|---|
1-9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
例如精度P=22时,numeric(22,5)是13字节,P=8时,numeric(8,3)是5字节
数据类型
-
Character(n):字符/字符串,即char
-
char:
- 长度不可变,固定2个字节
- 对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;
-
varchar(n)
- 长度可变
- 对每个英文字符占用2个字节,汉字也占用2个字节。
- n必须介于1-8000之间数字
-
BOOLEAN
- 值为True或者False
-
INT:普通int
- 2^31 到 2^31 – 1的整型数据(所有数字)。存储大小为4个字节。(32位)
-
BIGINT:
- -2^63 到 2^63-1的整型数据(所有数字)。存储大小为8个字节。(64位)
-
SMALLINT:
- -2^15 到 2^15 – 1 的整型数据。存储大小为 2 个字节。 (16位)
-
TINYINT:
- -2^7到 2^7 – 1 的整型数据。存储大小为 1个字节。 (8位)
-
DECIMAL(p,s)
-
p是指数的总长度
-
s是指小数点的位数
-
最大精度为38
-
举例
mysql> CREATE TABLE IF NOT EXISTS `decimal_test`( -> num DECIMAL(5,3) -> ); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO `decimal_test`(num) VALUES(1.2345); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> INSERT INTO `decimal_test`(num) VALUES(12.345); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `decimal_test`(num) VALUES(123.45); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> INSERT INTO `decimal_test`(num) VALUES(1.2); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM `decimal_test`; +--------+ | num | +--------+ | 1.235 | | 12.345 | | 99.999 | 没有正常保存 | 1.200 | 末尾未满补0 +--------+
如果小数位超过,则四舍五入
-
-
NUMERIC(p,s)
- p是指数的总长度
- s是指小数点的位数
- 它与DECIMAL同义
- 最大精度为38
-
DATE与DATETime类似
create table if not exists date1( d date not null ) insert into date1 (d) value('2010-01-02') create table if not exists date2( d datetime not null ) insert into date2 (d) value('2010-01-02')