前言
記錄自己在使用 MySQL 過程中踩過的坑、SQL 最佳化方案等。
有收穫的話請 點個贊,沒有收穫的話可以 反對 沒有幫助 舉報 三連。
起因
剛剛測試在群裡艾特我,銀行卡繫結失敗
我抄起鍵盤開啟日誌,發現是使用者中心介面返回新增失敗,順手把日誌扔群裡了
然後艾特使用者中心負責的小夥伴,雙手離開鍵盤看戲
[ 2019-10-11 15:22:00 ] 返回-addBankCard-{"errorCode":100003,"errorMsg":"新增失敗","success":false}
不一會兒使用者中心的小夥伴就找到問題了,兩個表欄位長度不一致,資料寫不進去
問題分析
先上表結構,省略了一些欄位。
- 使用者資訊表
CREATE TABLE `user_info` ( `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'id', `name` char(32) DEFAULT NULL COMMENT '姓名', `intl` char(30) DEFAULT '86' COMMENT '國籍', `sex` tinyint(2) unsigned DEFAULT '1' COMMENT '性別 1男 2女', PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='使用者個人資訊表';
- 銀行卡資訊表
CREATE TABLE `user_bank` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `uid` int(11) NOT NULL COMMENT 'UID', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名', `card_id` varchar(20) NOT NULL DEFAULT '' COMMENT '卡號', `bank` varchar(20) NOT NULL DEFAULT '' COMMENT '銀行名', `subbank` varchar(40) NOT NULL DEFAULT '' COMMENT '支行名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2765 DEFAULT CHARSET=utf8mb4 COMMENT='使用者銀行卡資訊表';
透過觀察表結構我們發現兩個表裡的 name
欄位屬性差別有點大,另外 uid
欄位屬性也不一致。
如果還有其他問題歡迎大家評論
結論
冗餘欄位要保證型別和長度完全一致。
本作品採用《CC 協議》,轉載必須註明作者和本文連結