mysql에서 전역 sql_mode 설정
mysql에서 sql_mode를 설정하려고하는데 오류가 발생합니다.
명령:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
여러 모드를 설정하는 적절한 방법이 아닙니까? 세션 및 글로벌 모드 설정의 장점은 무엇입니까? 어느 것이 선호됩니까? 다른 사용자가 다른 UNC 값으로 데이터베이스를 업데이트하려고 시도하고 세션 모드를 'NO_BACKSLASH_ESCAPES'로 설정하는 것이 좋지만,이를 위해 gloabl 모드를 사용하는 것이 합리적입니다. 이게 말이 되요?
알려주세요.
감사.
BTW, MySQL에서 전역을 설정하는 경우 :
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
영구적으로 설정되지 않으며 다시 시작할 때마다 되돌아갑니다.
따라서 구성 파일 (예 : /etc/mysql/my.cnf
[mysqld] 섹션)에서이를 설정해야 MySQL을 다시 시작한 후에도 변경 사항이 적용됩니다.
구성 파일 : /etc/mysql/my.cnf
[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
업데이트 : 최신 버전의 Mysql (예 : 5.7.8 이상)에는 약간 다른 구문이 필요할 수 있습니다.
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
sql-mode
밑줄 이 아닌 사이에 대시가 있고 모드가 큰 따옴표로 묶여 있는지 확인하십시오 .
항상 참조 MySQL의 문서를 위한 당신의 볼 버전의 SQL 모드 옵션을 .
나는 그것을 해결했다.
올바른 모드는 다음과 같습니다.
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
mysql 구성 파일을 사용하여 영구적으로 SQL 모드 설정.
내 경우에는 내가 파일을 변경해야 /etc/mysql/mysql.conf.d/mysqld.cnf
으로 mysql.conf.d
포함되어 있습니다 /etc/mysql/my.cnf
. 나는 이것을 [mysqld]에서 변경한다.
[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"
방금 ONLY_FULL_GROUP_BY
SQL 모드를 제거 하면 문제가 발생했습니다.
나는 사용 ubuntu 16.04
하고 php 7
있으며 mysql --version은 나에게 이것을 준다.mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
이 변경 후 명령 아래 실행
sudo service mysql stop
sudo service mysql start
이제이 쿼리로 SQL 모드를 확인 SELECT @@sql_mode
하고 방금 설정 한 모드를 가져와야합니다.
구성 파일에 복사 : /etc/mysql/my.cnf OR /bin/mysql/my.ini
[mysqld]
port = 3306
sql-mode=""
MySQL
재시작.
또는 할 수 있습니다
[mysqld]
port = 3306
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
MySQL
재시작.
MySQL 8에서이 오류를 검색하는 사람을 위해.
MySQL 8.0.11은 sql-mode에서 'NO_AUTO_CREATE_USER'를 제거합니다.
MySQL 5.7 : GRANT를 사용하여 사용자 생성. 대신 CREATE USER를 사용하십시오. 이 방법을 따르면 NO_AUTO_CREATE_USER SQL 모드는 GRANT 문에 중요하지 않으므로 더 이상 사용되지 않습니다. MySQL 8.0.11 : GRANT를 사용하여 사용자 생성. 대신 CREATE USER를 사용하십시오. 이 방법을 따르면 NO_AUTO_CREATE_USER SQL 모드는 GRANT 문에 중요하지 않으므로 제거됩니다.
여기 에서 찍은
따라서 sql_mode
다음과 같이 될 수 있습니다.
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
또는 Docker를 사용하는 경우 docker-compose.yml에 다음 명령을 추가 할 수 있습니다.
mysql:
image: mysql:8.0.13
command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ports:
- 13306:${MYSQL_PORT}
In my case i have to change file /etc/mysql/mysql.conf.d/mysqld.cnf
change this under [mysqld
]
Paste this line on [mysqld
] portion
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
If someone want to set it only for the current session then use the following command
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
참고URL : https://stackoverflow.com/questions/2317650/setting-global-sql-mode-in-mysql
'Programing' 카테고리의 다른 글
MongoDB에 대한 연결이 거부되었습니다. errno 111 (0) | 2020.11.03 |
---|---|
C ++ 프로그램에 시간 지연을 어떻게 추가합니까? (0) | 2020.11.03 |
왜 파이썬 3.6.1이 AttributeError를 던지는가 : 모듈 'enum'에 'IntFlag'속성이 없나요? (0) | 2020.11.03 |
HTML5 비디오 // 컨트롤을 완전히 숨기기 (0) | 2020.11.03 |
파일 또는 어셈블리 'WebGrease, Version = 1.5.1.25624, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'또는 해당 종속성 중 하나를로드 할 수 없습니다. (0) | 2020.11.03 |