天天看點

MySQL Error (Always Continue)

​​    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)