MySQL bị lỗi tiếng Việt hoặc emoji: kiểm tra UTF-8 và utf8mb4 thế nào?

Đang tìm đáp án

30 lượt xem · 4 trả lời

Cộng đồng đang cùng tìm lời giải

Người đặt câu hỏi có thể chọn câu trả lời hữu ích nhất làm đáp án.

1. 12:27 06/08/2026
Chào mọi người, Mình gặp tình trạng một số ký tự tiếng Việt hiển thị sai, còn emoji đôi khi không lưu được vào MySQL. Database có vẻ đã dùng UTF-8 nhưng mình chưa biết cần đồng bộ những lớp nào giữa PHP, PDO, bảng dữ liệu và HTML. Mong admin hướng dẫn cách kiểm tra để xử lý dứt điểm. Cảm ơn!
0 Facebook
2. 12:27 06/08/2026
Chào bạn Ngọc Mai, Để hỗ trợ đầy đủ tiếng Việt và emoji, hãy dùng utf8mb4 xuyên suốt: database, bảng, cột, kết nối PDO và header HTML. Tên charset utf8 trong MySQL cũ không phải lúc nào cũng hỗ trợ đầy đủ ký tự bốn byte như emoji. Kiểm tra SHOW CREATE TABLE và cấu hình DSN PDO có charset=utf8mb4; chọn collation phù hợp với nhu cầu so sánh, chẳng hạn nhóm unicode hiện đại khi phiên bản MySQL hỗ trợ. Tệp mã nguồn cũng cần lưu UTF-8, và response HTML cần khai báo meta charset UTF-8. Trước khi đổi dữ liệu production, sao lưu, thử migration trên bản sao và kiểm tra kỹ các index có cột VARCHAR dài vì utf8mb4 có thể làm thay đổi giới hạn byte của index.
0
3. 09:29 11/10/2026
Trả lời Ngọc Mai Chào mọi người, Mình gặp tình trạng một số ký tự tiếng Việt hiển thị sai, còn emoji đôi khi không lưu được vào MySQL. Da…
Tôi đã gặp lỗi hiển thị tương tự khi chuyển đổi cơ sở dữ liệu sang utf8mb4. Đầu tiên, hãy kiểm tra các biến MySQL: ```sql SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server'; ``` Sau đó, kiểm tra từng bảng: ```sql SHOW CREATE TABLE your_table; ``` Đảm bảo rằng kiểu cột là `VARCHAR(...) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci` (hoặc `utf8mb4_general_ci`). Nếu không, hãy chuyển đổi bảng bằng `ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;`. Trong PHP/PDO, hãy đặt bộ ký tự trong chuỗi kết nối, ví dụ: `PDO::ATTR_EMULATE_PREPARES => false` và DSN `"mysql:dbname=db;charset=utf8mb4"`. Đặt mã hóa nội bộ trong PHP: `mb_internal_encoding('UTF-8')`. Cuối cùng, xác nhận rằng các tệp HTML của bạn có `` và tệp được lưu ở định dạng UTF-8 (BOM tùy chọn). Bảng mã hiện tại của bảng và phiên bản PHP/PDO bạn đang sử dụng là gì?
0
4. 15:12 11/10/2026
Trả lời Biên Tập Viên Tôi đã gặp lỗi hiển thị tương tự khi chuyển đổi cơ sở dữ liệu sang utf8mb4. Đầu tiên, hãy kiểm tra các biến MySQL: ```sq…
Để khắc phục sự cố hiển thị tiếng Việt hoặc emoji, trước tiên hãy xác nhận bộ ký tự hiện tại của máy chủ: ```sql SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server'; ``` Sau đó, kiểm tra định nghĩa từng bảng:
0
5. 02:33 26/10/2026
Trả lời Biên Tập Viên Tôi đã gặp lỗi hiển thị tương tự khi chuyển đổi cơ sở dữ liệu sang utf8mb4. Đầu tiên, hãy kiểm tra các biến MySQL: ```sq…
Mình bổ sung thêm một điểm dễ bị bỏ sót: cần phân biệt lỗi do lưu trữ hay do hiển thị. Nếu tiếng Việt vẫn ổn mà chỉ emoji lỗi, khả năng cao cột/bảng hoặc kết nối chưa phải utf8mb4, vì “utf8” của MySQL thực chất là utf8mb3, chỉ 3 byte. Bạn kiểm tra thêm bằng SHOW VARIABLES LIKE 'character_set%'; và SHOW FULL COLUMNS FROM your_table; để xem cả charset ở mức session, database, bảng và cột. Với PDO, đặt charset=utf8mb4 trong DSN là cần nhưng nên kiểm tra cả character_set_client, character_set_connection, character_set_results sau khi kết nối. Lưu ý ALTER
0
Vui lòng đăng nhập để tham gia trả lời chủ đề này.
Điều hướng nhanh

Bạn muốn khám phá điều gì?

Tìm chủ đề, bài viết hoặc đi thẳng đến một khu vực của cộng đồng.

Esc để đóng Ctrl K để mở lại