Vấn đề: Cập nhật cột thành NULL khi khớp giá trị chứa ký tự đặc biệt
Cần tìm hàng có cột Code bằng chính xác chuỗi '100_Mike' (chứa gạch dưới) và đặt cột đó thành NULL.
Giải pháp: UPDATE với WHERE khớp chính xác
MySQL so sánh chuỗi mặc định không phân biệt chữ hoa/thường (collation *_ci) và khớp toàn bộ chuỗi. Ký tự đặc biệt như _, % chỉ có ý nghĩa đặc biệt trong LIKE, không phải trong =.
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Code VARCHAR(20)
) AUTO_INCREMENT = 1001;
INSERT INTO DemoTable (Code) VALUES
('John101'), ('234David'), ('100_Mike');
2. Dữ liệu ban đầu
+------+----------+
| Id | Code |
+------+----------+
| 1001 | John101 |
| 1002 | 234David |
| 1003 | 100_Mike |
+------+----------+
3. Câu lệnh UPDATE
UPDATE DemoTable
SET Code = NULL
WHERE Code = '100_Mike';
4. Kết quả
+------+----------+
| Id | Code |
+------+----------+
| 1001 | John101 |
| 1002 | 234David |
| 1003 | NULL |
+------+----------+
Lưu ý quan trọng
- Toán tử
=so khớp toàn bộ chuỗi, không cần escape_hay%. - Nếu dùng
LIKE,_khớp 1 ký tự bất kỳ,%khớp 0 hoặc nhiều ký tự. Cần escape:WHERE Code LIKE '100\_Mike' ESCAPE '\\'. - Đặt cột thành
NULLkhác với đặt thành chuỗi rỗng''.NULLchiếm 0 byte (thường) và có ngữ nghĩa "chưa biết/không áp dụng". - Cột phải cho phép NULL (không có
NOT NULLconstraint).