Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cập nhật chế độ SQL trong MySQL

MySQL đã thay đổi giá trị mặc định của biến sql_mode kể từ các bản phát hành trước đó đang phá vỡ mã hiện có trong một số ứng dụng. Hướng dẫn này giải thích cách thay đổi sql_mode theo các tính năng của ứng dụng. Nó cũng cung cấp các bước để bảo toàn giá trị này khi khởi động lại máy chủ.

Ghi chú :Bạn cũng có thể làm theo các hướng dẫn về MySQL - Cách cài đặt MySQL 8 trên Ubuntu, Cách xóa hoàn toàn MySQL khỏi Ubuntu và Tìm hiểu các truy vấn SQL cơ bản bằng MySQL.

Giá trị mặc định của biến sql_mode trong MySQL 8 như được hiển thị bên dưới.

# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Trong trường hợp của tôi, tùy chọn ONLY_FULL_GROUP_BY đang vi phạm mã, do đó tôi sẽ xóa nó để trình diễn mục đích .

Cập nhật trực tiếp

Chúng tôi có thể cập nhật trực tiếp giá trị của sql_mode bằng cách sử dụng các lệnh như được hiển thị bên dưới.

# Login
mysql -u root -p

# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

Giá trị sql_mode sẽ được thay đổi bằng các truy vấn được đề cập ở trên. Vấn đề là biến nhận lại giá trị mặc định của nó khi khởi động lại máy chủ. Chúng ta có thể giữ nguyên giá trị như được hiển thị trong phần tiếp theo.

Cập nhật vĩnh viễn

Chúng tôi có thể bảo toàn giá trị của sql_mode bằng cách cập nhật my.cnf tập tin. Vị trí của tệp này khác nhau dựa trên môi trường máy chủ và phiên bản. Các vị trí phổ biến nhất của tệp này bao gồm /etc/my. cnf , / etc / mysql /my.cnf / usr /etc/my.cnf . Nó cũng có thể nằm trên đường dẫn cục bộ của người dùng ~ / .my.cnf . Trên hệ thống của tôi có Ubuntu 18.04 LTS và MySQL 8, tôi tìm thấy tệp này tại / etc / mysql /my.cnf .

Trên Linux Mint 18 , vị trí tệp là / usr /my.cnf . Bạn cũng có thể tìm kiếm tệp bằng lệnh như hình dưới đây.

# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"

# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Máy chủ MySQL sẽ xem xét các vị trí được đề cập ở trên cho các cấu hình mặc định ở cả cấp hệ thống và cấp cục bộ. Cập nhật tệp my.cnf như hình bên dưới. Tôi đã sử dụng trình chỉnh sửa nano để trình diễn mục đích .

# Update my.cnf
sudo nano /etc/mysql/my.cnf

# Scroll down and update the file as shown below

...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

Bây giờ hãy lưu tệp và thoát khỏi trình chỉnh sửa. Đảm bảo bao gồm [mysqld] phía trên biến.

Khởi động lại máy chủ MySQL để đặt giá trị của biến sql_mode như được chúng tôi định cấu hình trong tệp my.cnf như được hiển thị ở trên.

# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart

# Using service
sudo service mysql restart

# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql

Tóm tắt

Trong hướng dẫn này, chúng tôi đã cập nhật giá trị của biến MySQL sql_mode và cũng bảo quản nó vĩnh viễn khi máy chủ khởi động lại.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Triển khai Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 12.04 (Precise Pangolin)

  2. LINQ to SQL nhiều bảng bên trái kết hợp bên ngoài

  3. java.sql.SQLException:Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ)

  4. Cách tạo một chuỗi với các ký tự đứng đầu / sau trong MySQL - LPAD (), RPAD ()

  5. Cột số lượng cao hơn đầu tiên trong một chỉ mục khi liên quan đến một phạm vi?