Hướng dẫn xử lý lỗi syntax error: INSERT INTO counter

6
0

Trong quá trình chuyển dữ liệu từ host cũ sang host mới hoặc chuyển đổi máy chủ server, đôi lúc bạn sẽ gặp lỗi syntax error: INSERT INTO counter khi truy cập vào website của mình, với thông báo syntax error có nghĩa là lỗi cú pháp. Trên thực tế thì đây không phải là lỗi. Nói đúng hơn là phiên bản mysql/mariadb giữa 2 máy chủ khác nhau. Một máy chủ sử dụng phiên bản quá cao và một máy chủ sử dụng phiên bản quá thấp.

Ảnh đính kèm bên dưới là một ví dụ thực tế mà mình gặp. Và để xử lý lỗi này mình có 2 cách như sau

CleanShot 2022 05 23 at 17.26.26@2x

Cách 1: Hạ cấp phiên bản MySQL/MariaDB

Bạn có thể cài lại phiên bản MySQL/MariaDB cho máy chủ mới cùng phiên bản mới máy chủ cũ, để lỗi không xảy ra. Tuy nhiên cách này bạn chỉ có thể sử dụng khi bạn quản lý máy chủ đó như sử dụng VPS riêng. Và cách này chỉ nên dùng khi máy chủ VPS của bạn chưa có dữ liệu và bạn chỉ mới vừa triển khai. Vì việc cài lại sẽ mất nhiều thời gian do phải sao lưu toàn bộ cơ sở dữ liệu hiện có rồi mới cài lại, sau khi cài xong thì phải import lại dữ liệu.

Nếu cách 1 gặp nhiều bất cập và bạn không thể làm hãy thử dùng cách 2 nhé.

Cách 2: Chỉnh sửa cấu hình my.cnf

Bạn hãy SSH vào máy chủ sau đó mở file my.cnf và thêm vào 2 dòng sau

vi /etc/my.cnf
  • Thêm vào 2 dòng bên dưới.
sql_mode = ""
innodb_strict_mode = 0
  • Khởi động lại dịch vụ mysql/mariadb
service mysqld restart
#Hoặc
systemctl restart mysqld
CleanShot 2022 05 23 at

Cách 3: Thay đổi sql mode trong phpMyAdmin

Nếu cách 1 và cách 2 bạn chưa thể thao tác được vì phải làm ở giao diện dòng lệnh, thì ở Cách 3 này sẽ hướng dẫn bạn thao tác trên phpMyAdmin.

Đầu tiên bạn hãy truy cập vào phpMyAdmin bằng quyền root hoặc admin. (Không sử dụng quyền user)

image 21

Sau đó bạn tìm đến dòng sql mode, thực hiện Sửa (Edit) và xoá hết các giá trị hiện có như ảnh đính kèm

image 22

Tiếp theo bạn tìm dòng innodb strict mode sau đó chuyển ON => OFF

image 23

innodb strict mode là gì?

innodb strict mode là một tùy chọn trong MySQL và MariaDB được thiết lập để đảm bảo tính nhất quán và an toàn cho các giao dịch trên cơ sở dữ liệu InnoDB. Khi được kích hoạt, innodb strict mode sẽ đảm bảo rằng các giao dịch InnoDB tuân thủ các quy tắc nghiêm ngặt, ví dụ như không cho phép chèn giá trị NULL vào các cột có ràng buộc NOT NULL, hoặc không cho phép chèn các giá trị không hợp lệ vào các cột có ràng buộc kiểu dữ liệu. Nó giúp ngăn chặn các lỗi dữ liệu và bảo vệ tính toàn vẹn của cơ sở dữ liệu.

sql_mode là gì?

sql_mode là một biến hệ thống trong MySQL và MariaDB, nó quy định cách thức hoạt động của các truy vấn SQL trên hệ thống cơ sở dữ liệu. Khi được thiết lập, sql_mode sẽ định nghĩa các giới hạn và quy tắc cụ thể cho các truy vấn SQL, bao gồm các quy tắc về định dạng của dữ liệu, xử lý các lỗi và cảnh báo trong trường hợp các truy vấn không đáp ứng các yêu cầu này.

Bây giờ bạn hãy truy cập lại vào website để xem kết quả nhé. Chúc bạn thực hiện thành công.

Đỗ Trung Quân
WRITTEN BY

Đỗ Trung Quân

Nguồn nội dung này đến từ Website DoTrungQuan.info

Trả lời