Lỗi 2003: Không kết nối được đến máy chủ MySQL
Khi sử dụng Navicat kết nối từ xa đến MySQL, lỗi 2003 xảy ra do các nguyên nhân chính:
- Dịch vụ MySQL chưa khởi động
- Quyền truy cập từ xa chưa được cấp
- Cổng 3306 bị chặn bởi tường lửa
Khởi động dịch vụ: Mở Run (Win+R), nhập services.msc, tìm dịch vụ MySQL (ví dụ MySQL80), click chuột phải chọn Start.
Cấp quyền truy cập từ xa:
USE mysql;
UPDATE user SET host = '%' WHERE user = 'admin_user';
FLUSH PRIVILEGES;
Cấu hình tường lửa Windows: Vào Windows Defender Firewall > Advanced Settings > Inbound Rules > New Rule, chọn Port, nhập 3306.
Lỗi 1251: Giao thức xác thực không hỗ trợ
Lỗi này xảy ra khi client không tương thích với plugin xác thực mới của MySQL 8.x (caching_sha2_password). Giải pháp:
ALTER USER 'admin_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secure_pass123';
FLUSH PRIVILEGES;
Thực hiện trong thư mục bin của MySQL qua Command Prompt.
Lỗi 1045: Truy cập bị từ chối
Lỗi xuất hiện khi nhập mysql -u root -p. Nguyên nhân:
- Dịch vụ MySQL không chạy
- Cổng cấu hình trong my.ini sai (ví dụ 3307 thay vì 3306)
- File my.ini chứa nội dung lỗi
- Mật khẩu đăng nhập không chính xác
Kiểm tra file my.ini và đảm bảo cổng đúng, sau đó restart dịch vụ.
Lỗi 1064: Cú pháp SQL sai
Khi sử dụng dấu nháy đơn/kép cho tên bảng/cột. MySQL yêu cầu dùng backtick (`) cho các tên trùng từ khóa:
SELECT `employee_name`, `salary` FROM `staff_table` WHERE `id` = 101;
Lỗi 1054: Cột không tồn tại
Lỗi xảy ra khi tên cột không đúng trong bảng. Kiểm tra:
- Tên cột viết sai chính tả
- Bảng không tồn tại
- Cột mới thêm chưa được lưu
- Có khoảng trắng thừa trong tên cột
Lỗi 1442: Trigger không thể thao tác bảng hiện tại
MySQL cấm INSERT/UPDATE/DELETE trên bảng đang kích hoạt trigger. Giải pháp:
- UPDATE: Dùng SET trực tiếp
- INSERT/DELETE: Tạo bảng phụ để thực hiện thao tác
Lỗi 1303: Tạo trigger từ stored routine
Khi dùng Navicat tạo trigger, không cần khai báo CREATE TRIGGER. Chỉ cần chọn chức năng tạo trigger trong giao diện.
Lỗi 1292: Giá trị không hợp lệ
Khi dùng CONCAT() kết hợp chuỗi với số. Thay bằng CONCAT_WS():
SELECT CONCAT_WS('_', 'prefix', 1001, 'suffix') AS formatted_id;
Lỗi 1265: Dữ liệu bị cắt xén
Nguyên nhân:
- Dữ liệu vượt quá độ dài trường (ví dụ VARCHAR(10) nhập 15 ký tự)
- Loại dữ liệu không khớp (DECIMAL(10,2) nhập 10.112)
- Chèn ký tự không hợp lệ
Điều chỉnh cấu trúc bảng hoặc kiểm tra dữ liệu đầu vào.
Lỗi 1130: Host không được phép kết nối
Kiểm tra quyền truy cập từ xa và cấu hình user host trong MySQL.
Lỗi 1366: Không nhận diện chữ tiếng Việt
Do bảng không dùng utf8mb4. Tạo lại database với cấu hình:
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lỗi 3780: Khóa ngoại không tương thích
Kiểm tra:
- Loại dữ liệu của cột khóa chính và khóa ngoại (ví dụ INT vs VARCHAR)
- Cấu hình collation khác nhau giữa hai bảng
Lỗi 1075: Chỉ một cột AUTO_INCREMENT
Mỗi bảng chỉ được phép một cột AUTO_INCREMENT. Xóa AUTO_INCREMENT khỏi các cột không phải khóa chính.
Lỗi 1833: Xung đột khóa ngoại khi sửa cấu trúc
Thực hiện:
- Xóa tất cả khóa ngoại liên quan
- Thay đổi cấu trúc bảng
- Tạo lại khóa ngoại
Lỗi 1055: GROUP BY không đủ điều kiện
Trong chế độ ONLY_FULL_GROUP_BY, tất cả cột SELECT phải có trong GROUP BY. Sửa bằng cách thêm các cột vào GROUP BY:
SELECT category, SUM(sales) FROM orders GROUP BY category, region;
Lỗi 1093: Cập nhật bảng cùng lúc SELECT
Không thể SELECT và UPDATE cùng một bảng trong một câu lệnh. Giải pháp:
UPDATE table1 SET status = 'processed'
WHERE id IN (SELECT id FROM (SELECT id FROM table1 WHERE condition) AS temp);
Lỗi 1052: Cột không rõ ràng
Khi cột tồn tại ở nhiều bảng. Xác định rõ bằng alias:
SELECT t1.name, t2.name FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;
Lỗi 1222: Số lượng cột UNION không khớp
UNION yêu cầu số cột và kiểu dữ liệu giống nhau. Điều chỉnh SELECT để số cột bằng nhau.
Lỗi 1267: Collation không khớp
Thay đổi collation của bảng để đồng nhất:
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_vietnamese_ci;