Fix lỗi ONLY_FULL_GROUP_BY trong MySQL 5.7

Sau khi upgrade MySQL lên phiên bản 5.7, rất có thể sẽ gặp lỗi này khi truy vấn dữ liệu:

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Nguyên nhân là ở phiên bản MySQL 5.7, function ONLY_FULL_GROUP_BY sẽ được bật mặc định. Để khắc phục vấn đề này, chúng ta cần tắt ONLY_FULL_GROUP_BY đi.

Cách 1: Chạy câu lệnh (command line) này trên VPS/Server

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Cách 2: Chỉnh sửa trực tiếp trong file my.cnf. Vị trí file này thường ở /etc/my.cnf hoặc /etc/mysql/my.cnf

Đầu tiên, ta cần phải check sql_mode bằng lệnh sau

SELECT @@sql_mode;

Kết quả trả về tương tự như sau

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Sau đó, bạn mở file my.cnf lên và tìm [mysqld] và dán đoạn sau vào bên dưới nó

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Restart lại mysql.

Chúc thành công!