首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常見錯誤排查手冊:#1067 Invalid default value 與 UTF-8 中文亂碼實戰解決

     編輯:MySQL 資料庫相關知識

錯誤一:#1067 - Invalid default value for 'xxx'

現象

修改表結構(如 ALTER TABLE 修改列)時報錯,提示字段默認值無效或字段名已存在。

根因

  • 舊版 MySQL 允許 DATETIME/TIMESTAMP 列默認值為 0000-00-00 00:00:00,新版 sql_mode 包含 NO_ZERO_DATE/NO_ZERO_IN_DATE 後禁止。
  • 或元數據字典與存儲引擎不一致(如誤刪 .frm 後手動恢復)。

解決

  1. 刪除該列:ALTER TABLE t DROP COLUMN xxx;
  2. 重新添加並指定合法默認值:ALTER TABLE t ADD COLUMN xxx DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

錯誤二:UTF-8 導入後中文不顯示/亂碼

現象

本地 MySQL 5.0.45 (UTF-8) 導出,導入遠程 5.0.22 (UTF-8),中文全部丟失或變問號。

根因排查

  • 排除字符集不匹配(雙邊均 UTF-8)。
  • 定位為 **phpMyAdmin 版本不兼容**:舊版導出文件可能缺少 SET NAMES utf8 或使用非標準轉義,導致導入時字符集聲明缺失。

解決:繞過 phpMyAdmin,用 mysqldump 命令行

mysqldump -u root -p123456 thfxw > d:\ym.sql

命令行導出包含完整字符集設置,導入無誤。

通用避坑建議

  • 導出導入**統一用 mysqldump / mysql 命令行**,避免 GUI 工具版本差異。
  • 導出時顯式指定 --default-character-set=utf8(或 utf8mb4)。
  • 導入前檢查 SQL 文件頭部是否含 SET NAMES utf8 / SET CHARACTER SET utf8。
  • 表定義中字符集顯式聲明:CREATE TABLE t (...) DEFAULT CHARSET=utf8;。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved