Tôi đã vô tình kích hoạt chế độ CHỈ_ULL_GROUP_BY như thế này:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Làm thế nào để tôi vô hiệu hóa nó?
column
) để cải thiện truy vấn của mình. Xem tài liệu ở đây
Tôi đã vô tình kích hoạt chế độ CHỈ_ULL_GROUP_BY như thế này:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Làm thế nào để tôi vô hiệu hóa nó?
column
) để cải thiện truy vấn của mình. Xem tài liệu ở đây
Câu trả lời:
Giải pháp 1: Loại bỏ CHỈ_ULL_GROUP_BY khỏi bảng điều khiển mysql
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
bạn có thể đọc thêm ở đây
Giải pháp 2: Xóa CHỈ_ULL_GROUP_BY khỏi phpmyadmin
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, dù sao thì MySQL cũng xóa các dấu phẩy không mong muốn khỏi bản ghi. Câu trả lời của OP là chính xác.
GLOBAL
đã không làm việc cho tôi, nhưng SESSION
đã làm. SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Để giữ cài đặt mysql hiện tại của bạn và vô hiệu hóa, ONLY_FULL_GROUP_BY
tôi khuyên bạn nên truy cập phpmyadmin hoặc bất kỳ ứng dụng khách nào bạn đang sử dụng và nhập:
SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
kết quả sao chép tiếp theo vào my.ini
tập tin của bạn .
bạc hà :sudo nano /etc/mysql/my.cnf
ubfox 16 trở lên :sudo nano /etc/mysql/my.cnf
Ubuntu 14-16 :/etc/mysql/mysql.conf.d/mysqld.cnf
copy_me
kết quả có thể chứa một văn bản dài có thể được cắt theo mặc định. Hãy chắc chắn rằng bạn sao chép toàn bộ văn bản!câu trả lời cũ:
Nếu bạn muốn tắt lỗi vĩnh viễn " Biểu thức #N của danh sách CHỌN không có trong mệnh đề GROUP BY và chứa cột không phân chia 'db.table.COL', không phụ thuộc chức năng vào các cột trong mệnh đề GROUP BY; điều này không tương thích với sql_mode = only_full_group_by "Thực hiện các bước đó:
sudo nano /etc/mysql/my.cnf
Thêm phần này vào cuối tập tin
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sudo service mysql restart
để khởi động lại MySQL
Điều này sẽ vô hiệu hóa ONLY_FULL_GROUP_BY
cho TẤT CẢ người dùng
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
có thể không có trong tệp này, nó có thể nằm trong một thư mục bao gồm. Trước tiên hãy sử dụng lệnh này: grep -R "\[mysqld\]" *
để xem những gì ở đó - và cho vấn đề đó hãy thửgrep -R "\bsql_mode\b" *
Cẩn thận sử dụng
SET sql_mode = ''
Điều này thực sự xóa tất cả các chế độ hiện được kích hoạt. Nếu bạn không muốn gây rối với các cài đặt khác, bạn sẽ muốn thực hiện
SELECT @@sql_mode
đầu tiên, để có được danh sách các chế độ được phân tách bằng dấu phẩy, sau đó đặt nó vào danh sách này mà không có ONLY_FULL_GROUP_BY
tùy chọn.
then SET it to this list without the ONLY_FULL_GROUP_BY option.
gì?
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
sql_mode=<comma-separated-list>
sau đó dừng và khởi động máy chủ của bạn. Thực hiện theo các tài liệu cho hệ điều hành của bạn để biết vị trí và cách tốt nhất để chỉnh sửa, my.cnf.
Hãy thử xem:
SET sql_mode = ''
Lưu ý cộng đồng: Như đã chỉ ra trong các câu trả lời dưới đây, điều này thực sự xóa tất cả các chế độ SQL hiện được bật. Đó có thể không nhất thiết là những gì bạn muốn.
''
= 'full group by is disabled'
? MySQL làm một số thứ khá ngớ ngẩn nhưng cái đó ở trên đó.
0 rows affected
và truy vấn của tôi vẫn không hoạt động:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
trong lệnh .
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> exit;
sql_mode
khôi phục lại giá trị trước đó. Tôi có thể làm gì bây giờ?
Chỉ thêm một chế độ vào sql_mode mà không xóa các chế độ hiện có:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
Chỉ xóa một chế độ cụ thể khỏi sql_mode mà không xóa các chế độ khác:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
Trong trường hợp của bạn, nếu bạn muốn xóa ONLY_FULL_GROUP_BY
chế độ chỉ , sau đó sử dụng lệnh bên dưới:
SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Tham khảo: http://johnemb.blogspot.com/2014/09/adding-or-removing-inderson-sql-modes.html
Cảm ơn @cwhisperer. Tôi gặp vấn đề tương tự với Doctrine trong ứng dụng Symfony. Tôi vừa thêm tùy chọn vào config.yml:
doctrine:
dbal:
driver: pdo_mysql
options:
# PDO::MYSQL_ATTR_INIT_COMMAND
1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
Điều này làm việc tốt cho tôi.
SET NAMES
bằng phương pháp này, trong hầu hết các trường hợp, symfony không cần thiết đã đặt nó thông qua doctrine.dbal.charset cofnig: symfony.com/doc/cản/reference/configuration/doctrine.html và thực hiện đúng cách thông qua PDO dns, SET NAMES là cách làm lỗi thời, không nên sử dụng cho phiên bản PHP lớn hơn 5,3
Trên:
Làm:
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Sao chép và dán:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Đến cuối tập tin
$ sudo service mysql restart
/etc/mysql/mysql.cnf
trỏ đến 2 thư mục cấu hình !includedir /etc/mysql/conf.d/
+ !includedir /etc/mysql/mysql.conf.d/
. Cùng đi cho /etc/mysql/my.cnf
. Do đó tôi giả sử rằng các tệp cấu hình không bị ghi đè khi cập nhật. Bạn có thể đọc thêm ở đâyhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
có lẽ điều quan trọng là tạo một tệp mới /etc/mysql/mysql.conf.d/mysqld_mode.cnf
thay thế
Tôi đã nhận thấy rằng giải pháp @Eyo Okon Eyo hoạt động miễn là máy chủ MySQL không được khởi động lại, sau đó cài đặt mặc định được khôi phục. Đây là một giải pháp lâu dài có hiệu quả với tôi:
Để xóa chế độ SQL cụ thể (trong trường hợp này là CHỈ_ULL_GROUP_BY ), hãy tìm chế độ SQL hiện tại:
SELECT @@GLOBAL.sql_mode;
sao chép kết quả và xóa khỏi nó những gì bạn không cần ( CHỈ_ULL_GROUP_BY )
ví dụ:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
đến
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
tạo và mở tập tin này:
/etc/mysql/conf.d/disable_strict_mode.cnf
và viết và dán vào đó chế độ SQL mới của bạn:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
khởi động lại MySQL:
sudo service mysql restart
Hoặc bạn có thể sử dụng ANY_VALUE()
để loại bỏ từ chối giá trị CHỈ_ULL_GROUP_BY, bạn có thể đọc thêm về nó tại đây
ANY_VALUE()
Các tài liệu MySQL cũng quy định cụ thể các phương pháp sau:
sql-mode="<modes>"
trong một tệp tùy chọn, chẳng hạn như my.cnf (hệ điều hành Unix) hoặc my.ini (Windows).--sql-mode="<modes>"
tùy chọn.* Trường hợp <modes>
danh sách các chế độ khác nhau được phân tách bằng dấu phẩy.
Để xóa chế độ SQL một cách rõ ràng, hãy đặt nó thành một chuỗi trống bằng cách sử dụng --sql-mode=""
trên dòng lệnh hoặc sql-mode=""
trong một tệp tùy chọn.
Tôi đã thêm sql-mode=""
tùy chọn /etc/my.cnf
và nó hoạt động.
Giải pháp SO này thảo luận về các cách để tìm ra tập tin my.cnf nào đang được sử dụng bởi MySQL.
Đừng quên khởi động lại MySQL sau khi thực hiện thay đổi.
SELECT @@GLOBAL.sql_mode;
Nếu bạn đang sử dụng WAMP. Nhấp chuột trái vào biểu tượng WAMP, sau đó chọn MySQL -> Cài đặt MySQL -> chế độ sql và sau đó chọn sql-mode-> chế độ người dùng
Trên sql của tôi (phiên bản 5.7.11 chạy trên Mac OS X), công việc này đối với tôi trên máy khách shell mysql:
SET
@@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Theo Tài liệu MySQL 5.6, sql_mode được mặc định là
chuỗi trống trong MySQL 5.6.5 trở lại NO_ENGINE_SUBSTITNING, STRICT_TRANS_TABLES trong 5.6.6 +
sql_mode := ''
là có thể. Tại sao bạn không đồng ý?
Trên MySQL 5.7 và Ubuntu 16.04, hãy chỉnh sửa tệp mysql.cnf.
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Bao gồm sql_mode như sau và lưu tệp.
[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Quan sát rằng, trong trường hợp của tôi, tôi đã xóa chế độ STRICT_TRANS_TABLES và ONLY_FULL_GROUP_BY.
Làm điều này, nó sẽ lưu cấu hình chế độ vĩnh viễn. Khác nhau nếu bạn chỉ cập nhật @@ sql_mode thông qua MySQL, bởi vì nó sẽ thiết lập lại khi khởi động lại máy / dịch vụ.
Sau đó, để cấu hình được sửa đổi thực hiện, hãy khởi động lại dịch vụ mysql:
$ sudo service mysql restart
Hãy thử truy cập mysql:
$ mysql -u user_name -p
Nếu bạn có thể đăng nhập và truy cập bảng điều khiển MySQL thì không sao. Tuyệt quá!
NHƯNG , nếu như tôi, bạn phải đối mặt với lỗi "biến không xác định sql_mode" , điều đó chỉ ra rằng sql_mode là một tùy chọn cho mysqld , bạn sẽ phải quay lại, chỉnh sửa lại tệp mysql.cnf và thay đổi [mysql]
thành [mysqld]
. Khởi động lại dịch vụ MySQL và thực hiện bài kiểm tra cuối cùng cố gắng đăng nhập vào bảng điều khiển MySQL. Nó đây rồi!
Đây là những gì tôi đã thực hiện để sửa lỗi trên bàn làm việc của Mysql:
Trước khi tôi nhận được giá trị hiện tại với lệnh dưới đây
SELECT @@sql_mode
sau đó, tôi đã xóa khóa ONLY_FULL_GROUP_BY khỏi danh sách và tôi đã dán lệnh bên dưới
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Đối với Mac OS Mojave (10.14) Thiết bị đầu cuối mở
$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf
Dán sau:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Shortkeys để Save & Exit nano: Ctrl+x
và y
vàEnter
Lưu ý: Bạn có thể cần cập nhậtmysql-5.7.24-macos10.14-x86_64
trong các lệnh này, chỉ cần kiểm tra tên thư mục chính xác bạn có trong/usr/local/
Hy vọng nó sẽ giúp được ai đó!
sql_mode
MySQL 5.7.9 trở lên
Để thêm hoặc xóa chế độ khỏi sql_mode
, bạn có thể sử dụng list_add
và các list_drop
chức năng.
Để xóa chế độ khỏi hiện tại SESSION.sql_mode
, bạn có thể sử dụng một trong các cách sau:
SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
Để xóa chế độ khỏi chế độ GLOBAL.sql_mode
vẫn tồn tại cho hoạt động thời gian chạy hiện tại , cho đến khi dịch vụ được khởi động lại .
SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');
MySQL 5.7.8 trở lên
Vì sql_mode
giá trị là một chuỗi các chế độ CSV, bạn sẽ cần đảm bảo rằng chuỗi không chứa dấu phẩy dư, có thể được thực hiện bằng cách sử dụng TRIM(BOTH ',' FROM ...)
.
Để xóa chế độ khỏi sql_mode
biến, bạn sẽ muốn sử dụng REPLACE()
cùng với TRIM()
để đảm bảo mọi dấu phẩy còn lại được xóa.
SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Để thêm một chế độ cho sql_mode
biến, bạn sẽ muốn sử dụng CONCAT_WS(',', ...)
, để đảm bảo dấu phẩy được nối với các chế độ hiện tại và TRIM()
để đảm bảo mọi dấu phẩy còn lại được xóa.
SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));
LƯU Ý: Thay đổi
GLOBAL
biến không truyền sangSESSION
biến, cho đến khi kết nối mới được thiết lập.Các
GLOBAL
biến sẽ kéo dài cho đến khi dịch vụ chạy được khởi động lại.Các
SESSION
biến sẽ tồn tại cho kết nối hiện tại, cho đến khi kết nối được khép kín và một kết nối mới được thiết lập.
GLOBAL.sql_mode
Vì SET sql_mode = 'ONLY_FULL_GROUP_BY';
được thực hiện mà không có công cụ GLOBAL
sửa đổi, thay đổi chỉ ảnh hưởng đến SESSION
giá trị trạng thái hiện tại , cũng liên quan đến @@sql_mode
. Để xóa nó và trở về mặc định toàn cầu trên giá trị khởi động lại máy chủ , bạn sẽ muốn sử dụng giá trị từ đó @@GLOBAL.sql_mode
. [sic]
SESSION
Giá trị hiện tại chỉ hợp lệ cho kết nối hiện tại. Kết nối lại với máy chủ sẽ hoàn nguyên giá trị trở lạiGLOBAL
giá trị.
Để hoàn nguyên giá trị trạng thái phiên hiện tại về giá trị toàn cầu hiện tại, bạn có thể sử dụng một trong các cách sau:
SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;
Thay đổi SESSION.sql_mode
giá trị thànhONLY_FULL_GROUP_BY
SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+
Hoàn nguyên SESSION.sql_mode
giá trị về GLOBAL.sql_mode
giá trị
SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+
sql_mode
Để đặt chế độ SQL khi khởi động máy chủ, hãy sử dụng
--sql-mode="modes"
tùy chọn trên dòng lệnh hoặcsql-mode="modes"
trong tệp tùy chọn, chẳng hạn như my.cnf (hệ điều hành Unix) hoặc my.ini (Windows). [sic]
Vui lòng xem phiên bản MySQL của bạn để xác định các chế độ được hỗ trợ và mặc định .
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION" #default <= 5.7.4
sql_mode
Giá trị mặc địnhVì các giá trị tài liệu MySQL trên mỗi phiên bản đã bị xóa, tôi đã thêm chúng vào đây để bạn tham khảo.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Bỏ qua
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.8, <= 8.0.4
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
MySQL 5.7.7
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.5, <= 5.7.6
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION
MySQL> = 5.6.6, <= 5.7.4
NO_ENGINE_SUBSTITUTION
MySQL <= 5.6.5
''
Nếu bạn đang sử dụng MySQL 8.0.11, bạn cần xóa 'NO_AUTO_CREATE_USER' khỏi chế độ sql.
Thêm dòng sau trong tệp /etc/mysql/my.cnf
và tiêu đề [mysqld]
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Tôi đang sử dụng học thuyết và tôi đã thêm driverOptions trong doctrine.local.php của mình:
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => 'myusr',
'password' => 'mypwd',
'dbname' => 'mydb',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
),
),
),
),
));
Trong phpmyadmin, người dùng cần được kích hoạt SUPER trong các đặc quyền.
Đối với ai đang chạy VPS / Máy chủ với cPanel / WHM , bạn có thể thực hiện các thao tác sau để vô hiệu hóa vĩnh viễn CHỈ_ULL_GROUP_BY
Bạn cần quyền truy cập root (trên VPS hoặc máy chủ chuyên dụng)
Nhập WHM với quyền root và chạy phpMyAdmin
Nhấp vào Biến, tìm kiếm sql_mode
, nhấp vào 'Chỉnh sửa' và sao chép toàn bộ dòng bên trong hộp văn bản đó
ví dụ: sao chép này:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Kết nối với máy chủ của bạn thông qua SFTP - SSH (root) và tải xuống tệp /etc/my.cnf
Mở bằng my.cnf
tệp soạn thảo văn bản trên PC cục bộ của bạn và dán vào đó (bên dưới [mysqld]
phần) toàn bộ dòng bạn đã sao chép ở bước (2) nhưng xóaONLY_FULL_GROUP_BY,
ví dụ: dán cái này:
# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Lưu my.cnf
tệp và tải lại vào/etc/
Nhập WHM và đi đến "WHM> Khởi động lại dịch vụ> Máy chủ SQL (MySQL)" và khởi động lại dịch vụ
Tôi đang làm việc với mysql và đã đăng ký với người dùng root, giải pháp phù hợp với tôi là:
mysql SET SESSION sql_mode = (CHỌN REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Đây là một giải pháp vĩnh viễn cho MySql 5.7+ trên Ubuntu 14+:
$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\" >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name
Nếu bạn có thể đăng nhập mà không gặp lỗi - bạn nên thiết lập tất cả ngay bây giờ.
Bạn có thể vô hiệu hóa nó bằng tập tin cấu hình my.cnf
:
$ mysql --verbose --help | grep my.cnf
Vì vậy, trong macOS 10.12, nó ở usr/local/etc/my.cnf
. Bạn có thể chỉnh sửa sql_mode
tại đây:
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Đây là giải pháp của tôi thay đổi cấu hình Mysql thông qua bảng điều khiển phpmyadmin:
Để khắc phục "điều này không tương thích với sql_mode = only_full_group_by": Mở Trang chủ phpmyadmin và goto và chọn menu con 'Biến'. Cuộn xuống để tìm chế độ sql. Chỉnh sửa chế độ sql và xóa 'ONLY_FULL_GROUP_BY' Lưu nó.
SET sql_mode = ''
chưa