字符集和排序规则
COLLATE
常用的是utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8mb4_bin
- utf8mb4_bin: 二进制存储,区分大小写;
- utf8mb4_general_ci: 不区分大小写, 某些特殊语言或者字符集,排序结果可能不一致,更快;
- utf8mb4_unicode_ci: 不区分大小写,能够处理特殊字符的排序,更准确;
CHARACTER SET
- utf8:3位可变长度
- utf8mb4(utf8 most bytes 4): 比utf8多了emoji编码支持 (MySQL在5.5.3 增加)
finish
由于 MySQL中的数据编码格式已经精确到了“字段”。所以在建数据库的时候最好指定数据库编码格式,在这之后所建的“表”和“字段”的编码格式都会以此格式为默认编码格式。若之后想更改数据库的编码格式的话,就得一一更改之前的“表”和“字段”的编码格式了
varchar 和 Char
- char 最大长度255
- varchar 最大 2^16 字符,length 根据字符集计算得出
row_format(fixed与dynamic)
- 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
- 若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。
所以,做搜索查询量大的表一般都以空间来换取时间,设计成静态表。
数据结构
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数
int
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
smallint
从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
时间类型
| 类型 | 字节 | 例 | 精确性 |
|---|---|---|---|
| DATE | 三字节 | 2015-05-01 | 精确到年月日 |
| TIME | 三字节 | 11:12:00 | 精确到时分秒 |
| DATETIME | 八字节 | 2015-05-01 11:12:00 | 精确到年月日时分秒 |
| TIMESTAMP | 2015-05-01 11:12:00 | 精确到年月日时分秒 |
字符串类型
| 类型 | 单位 | 最大 | 特性 |
|---|---|---|---|
| CHAR | 字符 | 最大为255字符 | 存储定长,容易造成空间的浪费 |
| VARCHAR | 字符 | 可以超过255个字符 | 存储变长,节省存储空间 |
| TEXT | 字节 | 总大小为65535字节,约为64KB | - |
JAVA数据类型在MySql中的对应
| java类 | mysql数据库 | |
|---|---|---|
| java.lang.Byte | byte | TINYINT |
| java.lang.Short | short | SMALLINT |
| java.lang.Integer | integer | INGEGER |
| java.lang.Long | long | BIGINT |
| java.lang.Float | float | FLOAT |
| java.lang.Double | double | DOUBLE |
| java.lang.BigDecimal | big_decimal | NUMERIC |
| java.lang.Boolean | boolean | BIT |
| java.lang.String | string | VARCHAR |
| java.lang.Boolean | yes_no | CHAR(1)(‘Y’或’N’) |
| java.lang.Boolean | true_false | CHAR(1)(‘Y’或’N’) |
| java.uitl.Date / java.sql.Date | date | DATE |
| java.sql.Time | time | TIME |
| java.sql.Timestamp | timestamp | TIMESTAMP |
| java.uitl.Calendar | celendar | TIMESTAMP |
| java.uitl.Calendar | calendar | TIMESTAMP |
| java.io.Serializable | serializable | VARBINARY/BLOB |
| java.sql.Clob | clob | CLOB |
| java.sql.Blob | blob | BLOB |
| java.lang.Class | class | VARCHAR |
| java.uitl.Locale | locale | VARCHAR |
| java.uitl.TimeZone | timezone | VARCHAR |
| java.uitl.Currency | currency | VARCHAR |
int(M)
int(M): M indicates the maximum display width for integer types.1
在 integer 数据类型中,M 表示最大显示宽度。
M 和 zerofill 一起用采用意义 ,例:int(4)
| id |
|---|
| 0001 |
| 0010 |
| 0100 |
| 1000 |