當前位置:首頁 » 編程語言 » mysql57sqlmode
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mysql57sqlmode

發布時間: 2022-10-06 02:47:33

⑴ Mysql的生產環境該不該設置SQL mode

如果比較重要的庫對數據要求比較嚴格,建議還是開啟了.不過最後能在前端首先判斷吶,如果有難度的話,再到資料庫來控制,個人意見

⑵ Mode是怎樣設置的

mysql的sql_mode合理設置
mysql的sql_mode合理設置
sql_mode是個很容易被忽視的變數,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入。在生產環境必須將這個值設置為嚴格模式,所以開發、測試環境的資料庫也必須要設置,這樣在開發測試階段就可以發現問題

sql_mode常用值如下:
ONLY_FULL_GROUP_BY:
對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中
NO_AUTO_VALUE_ON_ZERO:
該值影響自增長列的插入。默認設置下,插入0或NULL代表生成下一個自增長值。如果用戶 希望插入的值為0,而該列又是自增長的,那麼這個選項就有用了。
STRICT_TRANS_TABLES:
在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制
NO_ZERO_IN_DATE:
在嚴格模式下,不允許日期和月份為零
NO_ZERO_DATE:
設置該值,mysql資料庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE過程中,如果數據被零除,則產生錯誤而非警告。如 果未給出該模式,那麼數據被零除時MySQL返回NULL
NO_AUTO_CREATE_USER:
禁止GRANT創建密碼為空的用戶
NO_ENGINE_SUBSTITUTION:
如果需要的存儲引擎被禁用或未編譯,那麼拋出錯誤。不設置此值時,用默認的存儲引擎替代,並拋出一個異常
PIPES_AS_CONCAT:
將"||"視為字元串的連接操作符而非或運算符,這和Oracle資料庫是一樣的,也和字元串的拼接函數Concat相類似
ANSI_QUOTES:
啟用ANSI_QUOTES後,不能用雙引號來引用字元串,因為它被解釋為識別符
ORACLE的sql_mode設置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

如果使用mysql,為了繼續保留大家使用oracle的習慣,可以對mysql的sql_mode設置如下:

在my.cnf添加如下配置
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

⑶ Linux 在線和離線安裝 MySQL

1 linux的常用軟體安裝

配置阿里雲的yum源

1) 安裝wget

2)下載yum源的配置文件

3) 替換原有的yum源

4) 更新現有yum

5) 安裝常用軟體

2 linux的JDK安裝

此處我們選用 jdk1.8_144這個版本作為我們的基礎JDK,此處要切記一點的是1.8的不同版本JDK在配置上會有很大的出入,所以請不要隨便更換基礎的JDK版本,否則你會很尷尬!

使用 rz 上傳jdk到root的家目錄

使用rpm命令安裝jdk

配置jdk的環境變數

刷新環境變數

到此 JDK安裝完成

3 安裝MySQL前說明

本例安裝MySQL版本是 5.7

4 linux 在線安裝MySQL

用root用戶安裝

1)獲取mysql 源安裝包

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

2)安裝mysql 源

rpm -ivh mysql57-community-release-el7-11.noarch.rpm

3)檢查mysql源是否安裝成功

yum repolist enabled | grep "mysql. -community. "

3)用 yum 命令安裝mysql

yum install mysql-community-server

4)修改mysql的配置文件

查看MYSQL配置文件載入順序:

修改/etc/my.cnf 配置文件內的文件目錄

datadir=/data/mysql/data

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

log-error=/data/mysql/log/mysqld.log

其中:

SQL_MODE:通過對其正確的設置可以完成一些約束檢查的工作,設置時,在配置文件my.cnf 中配置進行全局的設置。

STRICT_TRANS_TALES(嚴格模式):

只對支持事務的表啟用嚴格模式。

NO_AUTO_CREATE_USER:

禁止GRANT創建密碼為空的用戶。

NO_ENGINE_SUBSTITUTION:

啟用後,若需要的存儲引擎被禁用或未編譯,則拋出錯誤;未啟用時將用默認的存儲引擎代替,並拋出一個異常。

5)創建mysql 文件目錄

6)生成首次登錄隨機密碼

通過上面命令會在 /data/mysql/log/mysqld.log 中生成隨機碼,隨機碼用來首次登錄mysql。

7)修改mysql 文件目錄所有者為 mysql 用戶

8)啟動mysql

9) 關閉並重啟mysql(可選)

如果再次啟動報錯,就重啟Linux 系統。

10)用生成的隨機密碼登錄mysql

登錄後進入mysql 命令行

11)修改ROOT用戶密碼

設置完密碼後,需要用新密碼重新登錄

12)卸載mysql(不是必須的)

如果啟動報錯,根據錯誤查看原因,如果實在解決不了,卸載mysql 重新裝。

查看已經安裝過的組件

rpm -qa | grep -i mysql

用yum -y remove 卸載所有mysqlyum -y remove mysql57-community-release-el7-11.noarch yum -y remove mysql-community-common-5.7.19-1.el7.x86_64

卸載後再用 rpm -qa | grep -i mysql 查看,直至全部卸載
刪除/data/mysql 目錄

5 linux 離線安裝MySQL

1) 卸載CentOS7系統自帶mariadb

2) 檢查mysql是否存在

3) 檢查mysql的用戶和組是否存在如果不存在就創建

4) 下載MySQL的離線安裝包

官網下載地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads

版本選擇,可以選擇一下兩種方式:

1)使用Red Hat Enterprise Linux

Select Version: 5.7.* (因為更新的緣故具體細節版本可自行查看)

Select Operating System: Red Hat Enterprise Linux / Oracle Linux

Select OS Version: Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit)

列表中下載:

Compressed TAR Archive:(mysql-5.7.25-el7-x86_64.tar.gz) 【本文中使用的是這個版本】

2)使用Linux - Generic

Select Version: 5.7.* (因為更新的緣故具體細節版本可自行查看)

Select Operating System: Linux - Generic

Select OS Version: Linux - Generic (glibc 2.12) (x86, 64-bit)

列表中下載:

Compressed TAR Archive:(mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz)

注意:上邊兩種方式找mysql離線安裝包的方式都可以。

選完跳到以下這個頁面點擊 下面的連接就可以開始下載了

5) 上傳MySQL的離線安裝包並解壓進行傳統配置

6) 創建配置文件

7) 開始安裝MySQL

設置許可權

8) 啟動MySQL

9) 設置開機啟動

10) 修改配置文件

11) 獲取初始密碼

獲取初始密碼

創建軟連接

登錄mysql

修改密碼

檢驗密碼是否成功

設置遠程訪問

海汼部落原創文章,原文鏈接:(http://hainiubl.com/topics/75580)

⑷ 需修改mysql配置文件,通過手動添加sql_mode的方式強制指定不需要only_full_gr

1.用sql工具執行show variables like『%sql_mode%』

2.如果重啟之後不成功, 注意檢查你的my.ini 或者 my.cnf 有沒改對,是不是有多個同名字的配置文件, 也有可能叫sql-mode 或sql_mode 注意中間的『-』 或 『_』

  • mysql的sql_mode合理設置,sql_mode是個很容易被忽視的變數,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入。在生產環境必須將這個值設置為嚴格模式,所以開發、測試環境的資料庫也必須要設置,這樣在開發測試階段就可以發現問題 。

  • ONLY_FULL_GROUP_BY,對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中

  • NO_AUTO_VALUE_ON_ZERO,該值影響自增長列的插入。默認設置下,插入0或NULL代表生成下一個自增長值。如果用戶希望插入的值為0,而該列又是自增長的,那麼這個選項就有用了。

⑸ 如何在mysql配置文件里將sql-mode修改為NO_AUTO_CREATE_USER

1.用sql工具執行show variables like『%sql_mode%』

2.如果重啟之後不成功, 注意檢查你的my.ini 或者 my.cnf 有沒改對,是不是有多個同名字的配置文件, 也有可能叫sql-mode 或sql_mode 注意中間的『-』 或 『_』

⑹ MySQL中SQL模式的特點總結

前言
SQL模式影響MySQL支持的SQL語法和執行的數據驗證檢查。
MySQL伺服器可以在不同的SQL模式下運行,並且可以針對不同的客戶端以不同的方式應用這些模式,具體取決於sql_mode系統變數的值。DBA可以設置全局SQL模式以匹配站點伺服器操作要求,並且每個應用程序可以將其會話SQL模式設置為其自己的要求。
模式會影響MySQL支持的SQL語法以及它執行的數據驗證檢查。這使得在不同環境中使用MySQL以及將MySQL與其他資料庫伺服器一起使用變得更加容易。
下面話不多說了,來一起看看詳細的介紹吧
設置SQL模式
要在運行時更改SQL模式,請sql_mode使用以下SET
語句設置全局或會話
系統變數
SET
GLOBAL
sql_mode
=
'modes';
SET
SESSION
sql_mode
=
'modes';
模式列表
模式
注釋
ALLOW_INVALID_DATES
無效日期會生成錯誤
ERROR_FOR_DIVISION_BY_ZERO
除0錯誤
NO_BACKSLASH_ESCAPES
禁止使用反斜杠字元(\)作為字元串中的轉義字元。啟用此模式後,反斜杠就像其他任何一個普通字元一樣。
NO_UNSIGNED_SUBTRACTION
在整數值之間減去(其中一個是類型)
UNSIGNED,默認情況下會產生無符號結果。如果結果否則為負,則會導致錯誤
NO_ZERO_IN_DATE
'0000-00-00'
則允許並且插入產生警告
ONLY_FULL_GROUP_BY
select
內指定欄位必須出現在
groupby
中,否則錯誤
STRICT_TRANS_TABLES
為事務存儲引擎啟用嚴格的SQL模式,並在可能的情況下為非事務性存儲引擎啟用。
STRICT_ALL_TABLES
為所有存儲引擎啟用嚴格SQL模式。無效的數據值被拒絕。
詳情請參考
https://dev.mysql.com/doc/ref...
嚴格SQL模式
MySQL伺服器可以在不同的SQL模式下運行,並且可以針對不同的客戶端以不同的方式應用這些模式,具體取決於sql_mode系統變數的值。在嚴格SQL模式下,伺服器會將某些警告升級為錯誤。
嚴格SQL模式適用於以下語句
ALTER
TABLE
CREATE
TABLE
CREATE
TABLE
...
SELECT
DELETE
INSERT
LOAD
DATA
LOAD
XML
SELECT
SLEEP()
UPDATE
在存儲的程序中,如果在嚴格模式生效時定義了程序,則列出的類型的單個語句將以嚴格的SQL模式執行。
嚴格的SQL模式適用於以下錯誤,表示輸入值無效或缺失的一類錯誤。如果值具有錯誤的列數據類型或可能超出范圍,則該值無效。如果要插入的新行不包含其定義中NOT
NULL沒有顯式DEFAULT子句的列的值,則缺少值。
ER_BAD_NULL_ERROR
ER_CUT_VALUE_GROUP_CONCAT
ER_DATA_TOO_LONG
ER_DATETIME_FUNCTION_OVERFLOW
ER_DIVISION_BY_ZERO
ER_INVALID_ARGUMENT_FOR_LOGARITHM
ER_NO_DEFAULT_FOR_FIELD
ER_NO_DEFAULT_FOR_VIEW_FIELD
ER_TOO_LONG_KEY
ER_TRUNCATED_WRONG_VALUE
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ER_WARN_DATA_OUT_OF_RANGE
ER_WARN_NULL_TO_NOTNULL
ER_WARN_TOO_FEW_RECORDS
ER_WRONG_ARGUMENTS
ER_WRONG_VALUE_FOR_TYPE
WARN_DATA_TRUNCATED
致謝
感謝你看到這里,希望本篇文章可以幫到你,謝謝。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:如何開啟mysql中的嚴格模式學習SQL語句(強大的group
by與select
from模式)老生常談MYSQL模式匹配
REGEXP和like的用法Mysql
SQL伺服器模式介紹PHP基於單例模式實現的mysql類NoSQL反模式
-
文檔資料庫篇mysql中binlog_format模式與配置詳細分析mysql啟用skip-name-resolve模式時出現Warning的處理辦法

⑺ mysqld 加上sql_mode之後無法啟動

你把這個也去掉試試,你看看原來是有哪些,從原來的基礎上去掉only_full_group_by,而我原來的就沒有下面這個NO_AUTO_CREATE_USER

⑻ 如何開啟MYSQL的嚴格模式

嚴格模式是指 STRICT_ALL_TABLES和 STRICT_TRANS_TABLES么
全局修改,需要重啟mysql生效,下次重啟仍然生效
mysql配置文件[mysqld]下

# Set the SQL mode to strictsql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER...."

運行時修改,不需要重啟即能生效,重啟後該修改不生效,取配置文件

SET GLOBAL sql_mode = 'mode1,mode2...'; #資料庫沒有重啟,新進連接都有效SET SESSION sql_mode = 'mode1,mode2...'; #資料庫沒有重啟,當前連接有效

或者用命令行啟動mysql加上 --sql-mode="mode1,mode2..."參數,同set global
最後檢查下模式是不是改過來了:

select @@global.sql_mode global_mode,@@sql_mode session_mode;

⑼ mysql安裝時sqlmode是什麼模式

mysql安裝時sqlmode是什麼模式
SET[SESSION|GLOBAL]sql_mode='mode1,mode2…'語句,通過設置sql_mode變數更改模式。 在*nux下安裝完MySQL後,

⑽ 解決MySQL 5.7.9版本sql_mode=only_full_group_by問題

MySQL
5.7.9版本sql_mode=only_full_group_by問題
用到GROUP
BY
語句查詢時com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Expression
#2
of
SELECT
list
is
not
in
GROUP
BY
clause
and
contains
nonaggregated
column
'col_user_6.a.START_TIME'
which
is
not
functionally
dependent
on
columns
in
GROUP
BY
clause;
this
is
incompatible
with
sql_mode=only_full_group_by錯誤
解決方法

執行SET
GLOBAL
sql_mode
=
'';
把sql_mode
改成非only_full_group_by模式。
驗證是否生效
SELECT
@@GLOBAL.sql_mode

SELECT
@@sql_mode
SET
sql_mode
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGI
以上所述是小編給大家介紹的解決MySQL
5.7.9版本sql_mode=only_full_group_by問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!