您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“mysql SQL_MODE是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
SQL_MODE是MYSQL的一個(gè)環(huán)境變量, 它定義了MYSQL應(yīng)該支持的SQL語法,對數(shù)據(jù)的校驗(yàn)?zāi)J?/strong>等等。
mysql> select @@sql_mode;
mysql> show variables like 'sql_mode%';
+-------------------------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +-------------------------------------------------------------------------------------------------------------------------------------------+ | 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 | +-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
2.1,在MySQL中執(zhí)行:
set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
但是這種方法只是做了session(會(huì)話)級別的暫時(shí)修改。
2.2,我們可以通過更改配置文件my.cnf或者my.ini來實(shí)現(xiàn)永久修改。
sudo vi /etc/mysql/my.cnf 在最后添加以下內(nèi)容,將對應(yīng)的mode刪除 [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
重啟mysql,客戶端重新登錄,即可生效。
service mysql restart
如果是Laravel框架中,還需要在config/database.php文件中,將 mysql中的strict嚴(yán)格模式改為false.
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, => 改為false 'engine' => null, ]
對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么將認(rèn)為這個(gè)SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中
因?yàn)橛衞nly_full_group_by,select字段只能含有g(shù)roup by的字段,如果含有任何其他字段,都會(huì)報(bào)1055的錯(cuò),即只能是
select col1, col2 from tb1 group by col1, col2;
實(shí)例:
mysql> select * from tt1; +----+-------+--------+ | id | name | gender | +----+-------+--------+ | 1 | xiong | 0 | | 2 | ying | 0 | | 3 | cai | 0 | | 4 | zhang | 0 | | 5 | li | 1 | | 6 | wang | 1 | +----+-------+--------+ 6 rows in set (0.00 sec) mysql> select * from tt1 group by name; ERROR 1055 (42000): mysql> select name from tt1 group by name; +-------+ | name | +-------+ | cai | | li | | wang | | xiong | | ying | | zhang | +-------+ 6 rows in set (0.00 sec)
所以我們要正常使用group by 的話就必須刪除掉only_full_group_by。將only_full_group_by替換成空格。此時(shí)
mysql> select * from tt1 group by name; +----+-------+--------+ | id | name | gender | +----+-------+--------+ | 3 | cai | 0 | | 5 | li | 1 | | 6 | wang | 1 | | 1 | xiong | 0 | | 2 | ying | 0 | | 4 | zhang | 0 | +----+-------+--------+ 6 rows in set (0.00 sec)
在該模式下,如果一個(gè)值不能插入到一個(gè)事務(wù)表中,則中斷當(dāng)前的操作,對非事務(wù)表不做任何限制。
在嚴(yán)格模式,不接受月或日部分為0的日期。如果使用IGNORE選項(xiàng),我們?yōu)轭愃频娜掌诓迦?#39;0000-00-00'。在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告。
在嚴(yán)格模式,不要將 '0000-00-00'作為合法日期。你仍然可以用IGNORE選項(xiàng)插入零日期。在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告。
在嚴(yán)格模式,在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產(chǎn)生錯(cuò)誤(否則為警告)。如果未給出該模式,被零除時(shí)MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結(jié)果為NULL。
防止GRANT自動(dòng)創(chuàng)建新用戶,除非還指定了密碼。
如果需要的存儲(chǔ)引擎被禁用或未編譯,那么拋出錯(cuò)誤。不設(shè)置此值時(shí),用默認(rèn)的存儲(chǔ)引擎替代,并拋出一個(gè)異常。
“mysql SQL_MODE是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。