mysql基础-数据类型

字符类型

1.字符集

现在推荐utf8mb4,可以存储特殊符号和表情,utf8存储不了特殊符号

  • 不显示特殊符号😎 select cast( 0xF09F988E as char charset utf8 ) as emoji;
  • 显示特殊符号😎 select cast( 0xF09F988E as char charset utf8mb4 ) as emoji;

使用ut8mb4,mysql8以下的版本,需要在配置文件里,配置字符集

#服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
#设置mysql客户端默认字符集
default-character-set=utf8mb4

修改表的字符集,不能使用ALTER TABLE emoji_test CHARSET utf8mb4; 只能使用: ALTER TABLE emoji_test CONVERT TO CHARSET utf8mb4

2.字符串排序

排序规则以 _ci 结尾,表示不区分大小写(Case Insentive),_cs 表示大小写敏感,_bin 表示通过存储字符的二进制进行比较。需要注意的是,比较 MySQL 字符串,默认采用不区分大小的排序规则

3.存储密码

推荐使用 $salt$cryption_algorithm$value; salt是盐,cryption_algorithm代表算法类型,value是加密后的密码

2.日期类型

1.TIMESTAMP与datetime比较

datetime可以存储毫秒,如datetime(6),存储6位毫秒数,最多占用8个字节, timestamp类型可以存储毫秒,最多占用7个字节,TIMESTAMP字段存储的最大值是‘2038-01-19 03:14:07

尽量使用datetime,因为1.datetime不用时区转换,性能更好2.TIMESTAMP字段存储的最大值是‘2038-01-19 03:14:07',存储数据量有限

2.在行数据变更时自动记录变更时间

设置字段last_modify的属性,即可实现

ALTER TABLE fight.std_task MODIFY COLUMN last_modify datetime(6)  NOT null default CURRENT_TIMESTAMP(6) ON update  CURRENT_TIMESTAMP(6);

--  建表时字段定义
  `last_modify` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),

json类型

可以存储对象和数组;最大数据量是1g

  • 建表时建立虚拟列,实现虚拟索引
CREATE TABLE UserLogin (
    userId BIGINT,
    loginInfo JSON,
    cellphone VARCHAR(255) AS (loginInfo->>"$.cellphone"),
    PRIMARY KEY(userId),
    UNIQUE KEY uk_idx_cellphone(cellphone)
);

JSON_UNQUOTE(JSON_EXTRACT(loginInfo,"$.wxchat")) wxchat 等价于loginInfo->>"$.cellphone" cellphone

  • 修改已有表,新增虚拟列
ALTER TABLE std_task ADD COLUMN cellphone VARCHAR(255) AS (info->>"$.cellphone");
ALTER TABLE std_task ADD UNIQUE INDEX idx_cellphone(cellphone);
  • 给json数组上创建索引

ALTER TABLE std_task ADD INDEX task_tag ((cast((tag_name->"$") as unsigned array)));

通过member of、json_contains、json_overlaps

  • member of

`select * from std_task where 2 member of (tag_name -> "$") ;``

  • json_contains
select * from std_task where  json_contains ( (tag_name -> "$") ,'["4","6"]');

select * from std_task where  json_contains ( (tag_name -> "$") ,'["4","10"]');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章