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"]');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章