MySQL Error (Always Continue)
其實大部分error在網上都有對應的解決辦法,尤其是對Mysql這種使用範圍很廣的技術。自己就不為每個error單獨釋出部落格了,僅在這裡不斷添加,将自己遇到過的error,error原因,以及解決過程整理于此。按照Error号遞增排序
Error 1337 (42000)
Error情景:在建立存儲過程時報錯ERROR 1337 (42000): Variable or condition declaration after cursor or handler declaration
原因: 根據字面意思,我們要在定義遊标和處理程式前定義完需要的變量以及“done”
Solution:将建立遊标和處理程式(DECLARE continue HANDLER FOR NOT FOUND SET done = ture;)的定義放在最後
Error 1366
Error情景:為varchar()類型資料新增字段的時候,明明有雙引号且格式無誤,但就是報錯1366,無法插入。
原因:字段的字元集與傳輸SQL語句的字元集不想比對。(0629)
Solution:修改字元集
方法一:僅修改該字段字元集
- 檢視字段字元集(表名為t)
SHOW full columns FROM t;
DESC t; 無法檢視字元集資訊
- 修改字段屬性(即,修改字段類型)
ALTER TABLE t CHANGE content content varchar(20) character SET utf8 collate utf8_unicode_ci;
- 當然,utf8作為我們最常用的字元集,當然不想一次次地修改。
PS.
_ci結尾的字元集“不區分大小寫”, _cs結尾則區分大小寫
utf8是國際編碼,包含所有國家需要用到的字元
一般推薦使用utf8_unicode_ci,因為utf8_general_ci雖然校對速度快,但對德語、法語、俄語支援得不是很好,正确率較低。
方法二:修改資料庫預設字元集并重新開機資料庫
- 退出目前所使用的資料庫
USE mysql;
- 查詢預設字元集
SHOW variables like 'character%';
- 修改預設字元集(Centos7 MySQL5.7)
#退出MySQL
vi /eyc/my.cnf
#添加,儲存并退出
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
- 重新開機mysql
systemctl restart mysqld.service
- 檢驗:
SHOW variables like 'character%';
- 要求除了character_set_filesystem,character_sets_dir其他都為utf8.
Error 1054 (42S22)
Error情景:執行存儲過程的時候報錯ERROR 1054 (42S22): Unknown column 'temp_contnet' in 'field list'(0630)
原因:在執行從已有表中讀取以字元串為内容的字段轉存至新表時,兩表中對應兩字段字元集不相同
Solution:删除已建立的表和存儲過程,修改存儲過程建立表字元集,重新執行存儲過程
Error 1062 (23000)
Error情景:執行存儲過程的時候報錯(0630)
原因:之前測試的存儲過程已經建立了表存儲過程中要建立的表,是以就直接進行插入資料,但因為執行之前的存儲過程時資料已經插入,造成了PRIMARY KEY 的重複。
Solution:删除之前存儲過程建立的表,重新執行存儲過程
Error 1064 (42000)
Error情景:建立存儲過程時報錯ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near...(0710)
原因:根據英文可知是有文法錯誤
Solution:這裡整理下有可能出現的文法錯誤,友善以後對照排查
- 拼寫錯誤
- INSERT INTO 後面沒有加括号,即使隻有一個變量插入也要加括号
Error 1075 (42000)
Error情景:執行存儲過程時報錯(0630)
原因:根據error的提示,說明在存儲過程中建立資料表時沒有将自增列設定為主鍵
Solution:自增列必須為主鍵
Error 1819 (HY000)
Error情景:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements(0716)
原因:建立使用者時密碼不符合規範
Error 1044 (42000)
Error情景:ERROR 1044 (42000): Access denied for user 'sx'@'%' to database 'travel_agency'(0716)
原因:很自然咯,權限不夠
Solution:
GRANT ALL PRIVILEGES ON `travel_agency`.* TO 'sx'@'%' WITH GRANT OPTION
注意授權時資料庫名字段一定要使用英文頓号
Navicat 1142 SELECT command denied to user 'sx'@'xxx' for table 'user'
Error情景:(0716)