Case gỡ lỗi dạng Invalid datetime format: 1366 Incorrect string value

Thỉnh thoảng khi lập trình thường gặp trường hợp không thể lưu dữ liệu vào CSDL, tra lỗi thì bị báo lỗi sau:

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xF0\x9F\x98\x8A V...' for column

Lỗi này thường gặp khi chèn text có ký tự vượt ngoài phạm vi cho phép ví dụ lưu vào CSDL emoji như 😂🤣😃😁😀😊 sau đây là các bước thử lỗi:

  1. Kiểm tra xem trường dữ liệu đã được thiết lập Collation là utf8mb4_unicode_ci chưa trong phpmyadmin, nếu chưa cần đổi lại như ảnh

1

  1. Sau khi thiết lập Collation mà vẫn lỗi thì khả năng kết nối PDO với MySQL đang đặt là utf8. Mở config.php lên kiểm tra dòng này
$db_config['collation'] = 'utf8_unicode_ci';
$db_config['charset'] = 'utf8';

Đổi thành

$db_config['collation'] = 'utf8mb4_unicode_ci';
$db_config['charset'] = 'utf8mb4';
  1. Việc đổi như thế có thể ảnh hưởng đến việc thao tác đến CSDL hiện tại. Nếu bạn lo lắng ảnh hưởng có thể thêm đoạn code sau trước khi insert, update CSDL
$sql_array = [
    "SET character_set_client='utf8mb4'",
    "SET character_set_results='utf8mb4'",
    "SET character_set_connection='utf8mb4'"
];
foreach ($sql_array as $sql) {
    $db->query($sql);
}
  1. Nếu thử tất cả các hướng trên vẫn không được cần kiểm tra lại dữ liệu đầu vào của bạn có hợp lệ không.
  2. Cuối cùng vẫn không được bạn có thể thảo luận bên dưới
Tags: sửa lỗi NukeViet gỡ lỗi mysql
  0 Bình luận
Chia sẻ:  

Hướng dẫn lấy lại tên tác giả bài viết khi cập nhật lên NukeViet 4.5.00
Kiểm tra session của hosting

Đăng kí nhận tin mới
Hãy để lại email của bạn, tôi sẽ thông báo với bạn khi có bài viết mới nhất.
Bạn đã không sử dụng site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây