Có. Sử dụng ALTER TABLE ... CHANGE COLUMN (hoặc MODIFY) để đổi kiểu dữ liệu từ INT sang VARCHAR. MySQL tự động chuyển đổi giá trị số sang chuỗi.
Tạo bảng
mysql> CREATE TABLE DemoTable (
-> UserId INT,
-> UserFirstName VARCHAR(20),
-> UserLastName VARCHAR(20),
-> UserAge INT
-> );
Kiểm tra cấu trúc ban đầu
mysql> DESC DemoTable;
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserFirstName | varchar(20) | YES | | NULL | | | UserLastName | varchar(20) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | +---------------+-------------+------+-----+---------+-------+
Đổi UserId từ INT sang VARCHAR(20)
mysql> ALTER TABLE DemoTable CHANGE UserId UserId VARCHAR(20);
Query OK, 0 rows affected (1.35 sec)
Kiểm tra cấu trúc sau đổi
mysql> DESC DemoTable;
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | UserId | varchar(20) | YES | | NULL | | | UserFirstName | varchar(20) | YES | | NULL | | | UserLastName | varchar(20) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | +---------------+-------------+------+-----+---------+-------+
Lưu ý quan trọng
- An toàn: INT → VARCHAR luôn an toàn (số → chuỗi)
- Rủi ro: VARCHAR → INT có thể mất dữ liệu nếu chuỗi không phải số (ví dụ: 'abc' → 0 hoặc lỗi)
- Độ dài VARCHAR: Chọn đủ lớn (INT tối đa ~10 chữ số, BIGINT ~19, thêm dấu âm)
- Index/FK: Cần drop index/FK trước, tạo lại sau
- Strict mode: Bật
STRICT_TRANS_TABLESđể bắt lỗi chuyển đổi ngầm
Cú pháp thay thế: MODIFY
ALTER TABLE DemoTable MODIFY UserId VARCHAR(20);
Gọn hơn khi không đổi tên cột.
Kiểm tra dữ liệu sau chuyển đổi
SELECT UserId, UserId REGEXP '^[0-9]+$' AS IsNumeric FROM DemoTable;
Đảm bảo mọi giá trị đều là chuỗi số hợp lệ.