数值型数据关注的
- 数据的范围
- 数据的存储空间
- 数据展示的位数
- 数据的精度和浮点数
5.2.1 整形数据类型
- Tinyint,smallint,mediumint,int,bigint
- 定义整形数据类型的展示宽度:如century INT(4),被展示4个数字的宽度,展示的宽度和范围无关
浮点数数据类型
- 包含float和double类型,有整数部分和小数部分。可以明确的指定precision和scale,数据长度和小数长度Float(10,3)
固定点的数据类型
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)
float f = 345.98756f;//结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。
double d=345.975423578631442d;//结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。
注:float和double的相乘操作,数字溢出不会报错,会有精度的损失。
decimal dd=345.545454879…..//可以支持28位,对最后一位四舍五入。
注:当对decimal类型进行操作时,数值会因溢出而报错。
BIT数据类型
如下bit_col1 BIT(4)
bit_col2 BIT(20),代表的值为0 to 2的n次方-1
存储需要是INT((n+7)/8)
# String 数据类型
Type | Description |
Char | Fixed-leght non-binary string |
varchar | variable-length non-binary string |
TEXT | Variable-length non-binary string |
BINARY | FIXED-leght binary string |
VARBINARY | variable-length binary string |
BLOB | Variable-length binary string |
ENUM | Enumeration consisting of a fixed set of legal values |
SeT | set consisting of a fixed set of legal values |
1. 如何决定选择二进制或非二进制的字符串
2. 你需要存储的最大长度
3. 是否需要使用固定或变换的存储
4. 如何处理末尾的空格
5. 独立的值需要Enum或set是有用的
# 支持的字符集
非二进制的字符串有字符集组成,二进制字符串有二进制组成仅仅由他们数值区别
#非二进制字符串有如下的特征:
1. 一个非二进制字符串是字符序列
2. 非二进制的字符串,一个给定字符集可能,多个排序规则,但是一个给定的字符串仅仅只有一个排序规则
3. 多字节的字符串的比较是以字符为单位的,不是字节为单位的
4. 如果大小写不明显,‘ABC’和‘ABc’是相同的,排序的规则也决定了不同音调标记的字符是否相等。结果是非二进制的字符不是音调区别的。例如,‘a’没有音调可等被当做有音调的字符
5. 一个排序规则也可能是二进制的,在这中条件下,排序是基于数值性字符值。大小写注意和音调区别,一个二进制排序规则是每个字符和值可能有多个字节组成。二进制字符串总是基于字节的。
6. mysql> show collation like ‘latin1%’
-> ;
+——————-+———+—-+———+———-+———+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+——————-+———+—-+———+———-+———+
| latin1_german1_ci | latin1 | 5 | | Yes | 1 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | Yes | 1 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | Yes | 1 |
| latin1_general_cs | latin1 | 49 | | Yes | 1 |
| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |
+——————-+———+—-+———+———-+—–
—ci _cs or _bin,指定排序规则是大小写不注意,大小写注意或者二进制
二进制的字符串
- 被当做字节值的序列
- 二进制字符串包含字节,不是字符,二进制是大小写注意的因为大小写有不同的数值字节值的。不同的音调有不同的字节值。
- mysql> select upper(‘AaBb’), upper(binary ‘AaBb’);
+—————+———————-+
| upper(‘AaBb’) | upper(binary ‘AaBb’) |
+—————+———————-+
| AABB | AaBb |
+—————+———————-+
非二进制的字符串表示文本,二进制的表示图片和压缩数据
非二进制的char,varchar和text。二进制是binary,varbinary和blob