MySQL-NULL
参考文献
技术分享 | MySQL默认值选型(是空,还是 NULL)
NULL值
在 MySQL 中的 NULL 是一种特殊的数据.一个字段是否允许为 NULL,字段默认值是否为 NULL.
字段类型
表定义中设置方式
字段值
数值类型 (INT/BIGINT)
Default NULL / Default 0
NULL / NUM
字符类型 (CHAR/VARCHAR)
Default NULL / Default ” / Default ‘ab’
NULL / ” / String
NULL 与空字符存储上的区别
表中如果允许字段为 NULL,会为每行记录分配 NULL 标志位.NULL 除了在每行的行首存有 NULL 标志位,实际存储不占有任何空间.如果表中所有字段都是非 NULL,就不存在这个标示位了
NULL的问题
数值类型,以 INT 列为例
在 min / max / sum / avg 中 NULL 值会被直接忽略掉
对 NULL 做加减操作,如 1 + NULL,结果仍是 NULL
order by 以升序检索字段的时候 NULL ...
MySQL-File Page Type
参考文献
MySQL 源码
MySQL5.6 File Page Types
来源storage/innobase/include/fil0fil.h
File Page Type
十进制
16进制
含义
说明
FIL_PAGE_INDEX
17855
0x45BF
B-tree node
B+树叶节点
FIL_PAGE_UNDO_LOG
2
0x0002
Undo log page
Undo Log页
FIL_PAGE_INODE
3
0x0003
Index node
索引节点
FIL_PAGE_IBUF_FREE_LIST
4
0x0004
Insert buffer free list
Insert Buffer空闲列表
FIL_PAGE_TYPE_ALLOCATED
0
0x0000
Freshly allocated page
该页为最新分配
FIL_PAGE_IBUF_BITMAP
5
0x0005
Insert buffer bitmap
Insert Buffer位图
FIL_PAGE_TYPE_SYS
6
0x0006
...
MySQL中utf8与utf8mb4的区别
MySQL中utf8与utf8mb4的区别
utf8mb4是MySQL在5.3.3后增加的编码,其中mb4的意思是: most byte 4,专门兼容四字节的Unicode
原来的MySQL支持的utf8编码最大字符长度为3字节,若遇到4字节的宽字符就会插入异常
3字节的utf8最大能编码的Unicode字符为Oxffff,即Unicode中基本多文种平面(BMP),即任何不在基本多文种平面的Unicode字符都无法使用MySQL的utf8字符集进行存储,包括Emoji表情和很多不常用的汉字
当使用utf8字符集时,需要保留长度就是utf8最长字符乘以字符串长度,例CHAR(100),MySQL会保留300字节长度
utf8升级utf8mb4步骤
首先将数据库默认字符集有utf8改为utf8mb4,对应的表默认字符集也要改为utf8mb4,已经存储的字段默认字符集也要进行相应调整;
123456-- 修改数据库ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;- ...