Điều gì là nghiêm ngặt trong MySQL?

Gặp lỗi khi bạn không cung cấp giá trị cho một cột không rỗng có thể là một nguồn thất vọng to lớn. Có một cách để giảm thiểu sự xuất hiện của các lỗi như vậy bằng cách đặt giá trị mặc định cho các cột đó. Có vẻ như là một sửa chữa dễ dàng, nhưng, như trong tất cả mọi thứ, ma quỷ nằm trong chi tiết. Bạn phải cẩn thận rằng bạn không thêm một loạt dữ liệu chung chung - và vô ích - vào bảng của mình chỉ vì mục đích làm cho INSERT dễ dàng hơn. Trong blog hôm nay, chúng ta sẽ tìm hiểu về sự phân nhánh của Chế độ SQL nghiêm ngặt của MySQL, cũng như cách xem và thiết lập chế độ này bằng cách sử dụng. Trong phần 2, chúng ta sẽ đề cập đến thời điểm hợp lý khi sử dụng các giá trị mặc định (và khi nào thì không)

Trong MySQL, bạn có thể kiểm soát cách MySQL xử lý các giá trị không hợp lệ hoặc bị thiếu trong các câu lệnh thay đổi dữ liệu như CHÈN hoặc CẬP NHẬT bằng cách bật Chế độ SQL nghiêm ngặt. Giá trị bị thiếu khi một hàng mới được chèn không chứa giá trị cho cột không NULL không có mệnh đề MẶC ĐỊNH rõ ràng trong định nghĩa của nó. Nếu chế độ nghiêm ngặt không có hiệu lực, MySQL sẽ chèn các giá trị đã điều chỉnh cho cả giá trị không hợp lệ hoặc bị thiếu và đưa ra cảnh báo. Ví dụ về các giá trị được điều chỉnh sẽ là một chuỗi trống, số 0 và dấu thời gian/ngày là 0000-00-00 00. 00. 00

Khá rõ ràng là các giá trị được điều chỉnh có thể làm suy yếu toàn bộ quan điểm của việc mặc định. Do đó, bạn nên kích hoạt chế độ SQL nghiêm ngặt và cung cấp giá trị mặc định khi thích hợp. Trong Navicat, bạn có thể kiểm tra giá trị hiện tại của mình cho Chế độ SQL trên tab Biến của Màn hình máy chủ. Bạn sẽ tìm thấy nó trong Tools > Server Monitor trong menu chính

Điều gì là nghiêm ngặt trong MySQL?

Chế độ SQL nghiêm ngặt được bật nếu có STRICT_ALL_TABLES hoặc STRICT_TRANS_TABLES. Khi quyết định sử dụng cái nào, hãy lưu ý rằng cái sau dễ tha thứ hơn vì nếu thiếu giá trị, MySQL sẽ chèn giá trị được điều chỉnh phù hợp cho kiểu dữ liệu cột và tạo cảnh báo thay vì lỗi. Hơn nữa, việc xử lý tuyên bố vẫn tiếp tục. Trong khi đó, các giá trị không hợp lệ được chuyển đổi thành giá trị hợp lệ gần nhất

Hãy so sánh Chế độ SQL nghiêm ngặt với chế độ SQL mặc định bằng Cơ sở dữ liệu mẫu Sakila. Bảng diễn viên không cho phép null trong bất kỳ cột nào, bằng chứng là các hộp kiểm bên dưới tiêu đề Not null

Điều gì là nghiêm ngặt trong MySQL?

Nếu chúng ta tắt Chế độ SQL nghiêm ngặt cho phiên hiện tại bằng cách sử dụng lệnh SET và thực hiện INSERT chỉ cung cấp last_name, thì cơ sở dữ liệu sẽ chấp nhận nó, nhưng cung cấp một chuỗi trống cho first_name

Điều gì là nghiêm ngặt trong MySQL?

Điều gì là nghiêm ngặt trong MySQL?

Nếu chúng tôi kích hoạt lại Chế độ nghiêm ngặt, INSERT tương tự hiện không thành công với thông báo lỗi

Điều gì là nghiêm ngặt trong MySQL?

Trong blog hôm nay, chúng ta đã tìm hiểu về sự phân nhánh của Chế độ SQL nghiêm ngặt của MySQL, cũng như cách xem và thiết lập chế độ này bằng cách sử dụng. Trong phần 2, chúng ta sẽ đề cập đến thời điểm và thời điểm không hợp lý khi sử dụng các giá trị mặc định

Nguyên nhân sâu xa của lỗi này là do một số ứng dụng phần mềm như WHMCS không yêu cầu bật chế độ nghiêm ngặt của MySQL trên máy chủ

Tại Bobcares, chúng tôi thường nhận được yêu cầu từ khách hàng tắt chế độ nghiêm ngặt MySQL như một phần của Dịch vụ quản lý máy chủ của chúng tôi

Hôm nay, chúng ta hãy tìm hiểu chi tiết về cách Kỹ sư hỗ trợ của chúng tôi vô hiệu hóa chế độ nghiêm ngặt của MySQL và sửa các lỗi liên quan

Lý do tắt chế độ nghiêm ngặt của MySQL

Chế độ nghiêm ngặt kiểm soát cách xử lý các giá trị không hợp lệ hoặc bị thiếu khi tạo hoặc cập nhật bản ghi mới trên cơ sở dữ liệu MySQL

Theo mặc định, chế độ nghiêm ngặt của MySQL đang hoạt động trên máy chủ. Vì vậy, có thể phát sinh các cảnh báo đáng lo ngại khi người dùng cố gắng lưu các bản ghi có giá trị trống trên một số trường nhất định

Do đó, nó có thể không lưu/cập nhật các bản ghi ảnh hưởng đến hoạt động bình thường của trang web hoặc ứng dụng web

Do đó, Tắt chế độ MySQL là cần thiết đối với một số ứng dụng nhất định để hoạt động bình thường. Khi chúng tôi tắt chế độ nghiêm ngặt của MySQL, nó cho phép các truy vấn có giá trị bị thiếu hoặc không hợp lệ được thực thi

Cách chúng tôi vô hiệu hóa chế độ nghiêm ngặt của MySQL

Tại đây, hãy xem cách Kỹ sư hỗ trợ của chúng tôi vô hiệu hóa chế độ nghiêm ngặt của MySQL trên máy chủ

1. ban đầu, chúng tôi đăng nhập vào máy chủ với tư cách là người dùng root

2. Sau đó, chúng tôi đảm bảo rằng nếu chế độ nghiêm ngặt được bật trên máy chủ MySQL. Vì thế, chúng tôi đăng nhập với tư cách là người dùng mysql

mysql -u root -p

3. Và, chúng tôi chạy lệnh sau trên một thiết bị đầu cuối

SHOW VARIABLES LIKE 'sql_mode';

4. Một bảng có một số giá trị chế độ sql được phân tách bằng dấu phẩy sẽ hiển thị trên màn hình như hình bên dưới. Nếu nó chứa giá trị “STRICT_TRANS_TABLES”, điều đó có nghĩa là chế độ nghiêm ngặt của MySQL hiện đang hoạt động

5. Nếu vậy, chúng tôi tạo một tệp cấu hình mới bằng cách sử dụng nano hoặc bất kỳ trình chỉnh sửa nào khác

nano /etc/mysql/conf.d/disable_strict_mode.cnf

6. Tiếp theo, chúng tôi nhập văn bản dưới đây vào tệp và lưu các thay đổi

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

7, Ngoài ra, chúng tôi khởi động lại dịch vụ MySQL

service mysql restart

8. Nếu chế độ nghiêm ngặt bị tắt, đầu ra không chứa giá trị như “STRICT_TRANS_TABLES” sau khi chạy lệnh bên dưới

SHOW VARIABLES LIKE 'sql_mode';

Đây là cách chúng tôi đã vô hiệu hóa thành công chế độ nghiêm ngặt của MySQL

Ngoài ra, để tắt chế độ nghiêm ngặt trong máy chủ cPanel, chúng tôi cập nhật mã giống như trên trong /etc/my. cnf

MySQL vô hiệu hóa chế độ nghiêm ngặt – Cách chúng tôi khắc phục

Tại Bobcares, nơi chúng tôi có hơn một thập kỷ kinh nghiệm trong việc quản lý máy chủ, chúng tôi thấy rằng nhiều khách hàng gặp phải sự cố khi quản lý máy chủ MySQL bằng một số ứng dụng nhất định

Bây giờ, hãy xem các lý do chính gây ra lỗi MySQL và cách Kỹ sư hỗ trợ của chúng tôi khắc phục lỗi này

ứng dụng không tương thích

Gần đây, một trong những khách hàng của chúng tôi gặp sự cố máy chủ MySQL với ứng dụng web của anh ấy. Trong khi cập nhật một số dữ liệu lên máy chủ MySQL, anh ấy đã nhận được một lỗi như,

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of
SELECT list is not in GROUP BY clause and contains nonaggregated column
'yourdbname.tblannouncements.date' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Khi kiểm tra, các Kỹ sư hỗ trợ của chúng tôi nhận thấy rằng máy chủ MySQL đang chạy ở chế độ nghiêm ngặt và ứng dụng cũng không tương thích với chế độ SQL nghiêm ngặt. Vì vậy, chúng tôi đã tắt chế độ nghiêm ngặt trên máy chủ MySQL

Điều này đã giải quyết lỗi

dịch vụ MySQL

Tương tự, nhiều khách hàng cPanel đã báo cáo với chúng tôi rằng chế độ nghiêm ngặt hiển thị là đã bật sau khi thêm mã để tắt chế độ nghiêm ngặt. Anh ấy đã thêm mã
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION vào tệp cấu hình MySQL /etc/my. cnf.

Chủ yếu, điều này xảy ra khi các thay đổi không có hiệu lực sau khi mã được thêm vào tệp cấu hình MySQL. Vì vậy, cần phải khởi động lại dịch vụ MySQL. Mặt khác, nó sẽ chỉ đọc các tệp cấu hình khi tải lên lần đầu

Bằng cách khởi động lại dịch vụ MySQL, chúng tôi buộc MySQL sử dụng các tệp cấu hình mới. Đối với điều đó, chúng tôi sử dụng lệnh sau

/scripts/restartsrv_mysql

Đó là nó

[Cần hỗ trợ vô hiệu hóa chế độ nghiêm ngặt? . ]

Phần kết luận

Tóm lại, một số ứng dụng như WHMCS cần tắt chế độ nghiêm ngặt của MySQL để hoạt động bình thường. Hôm nay, chúng tôi đã xem cách Kỹ sư hỗ trợ của chúng tôi vô hiệu hóa chế độ nghiêm ngặt cho khách hàng của mình và giải quyết các lỗi liên quan

Có an toàn để tắt chế độ nghiêm ngặt của MySQL không?

Làm cách nào để xóa chế độ nghiêm ngặt trong MySQL?

Bạn có thể thay đổi giá trị của sql_mode thành NO_ENGINE_SUBSTITUTION để tắt hoàn toàn chế độ nghiêm ngặt, nhưng bạn có thể muốn tra cứu từng chế độ được định cấu hình trước khi tắt nó. Nếu sql_mode chưa được đặt, bạn có thể thêm nó dưới tiêu đề [mysqld], sau đó lưu tệp và khởi động lại MySQL

Làm cách nào để đặt sql_mode trong MySQL 8?

Bạn có thể đặt chế độ SQL mặc định (để khởi động mysqld) bằng tùy chọn --sql-mode. Sử dụng câu lệnh SET [GLOBAL. SESSION] sql_mode='modes ' , bạn có thể thay đổi cài đặt từ bên trong kết nối, cục bộ thành kết nối hoặc có hiệu lực trên toàn cầu.

Only_full_group_by trong MySQL là gì?

Nếu chế độ SQL ONLY_FULL_GROUP_BY được bật (theo mặc định), MySQL sẽ từ chối các truy vấn mà danh sách chọn, điều kiện HAVING hoặc danh sách ORDER BY đề cập đến các cột không được tổng hợp không được đặt tên trong mệnh đề GROUP BY cũng như không phụ thuộc chức năng vào chúng