PDO 버전 Atribut은 어디에서 유래합니까?
PDO 데이터베이스 드라이버에 대해 동일한 버전이라고 생각되는 다른 문자열이 반환됩니다.버전은 PHP에서 다음을 호출하여 가져옵니다.
Database::getConnection()->version()
내부적으로는 다음과 같은 일이 일어나고 있습니다.
$this->getAttribute(PDO::ATTR_SERVER_VERSION)
PDO 드라이버의 취득을 목표로 하고 있습니다.ATTR_SERVER_VERSION
제가 사용하고 있는 드라이버는 mysql이고 Linux에 있습니다.
하나의 머신에서 PHP 5.6을 실행하고 있는 경우 반환됩니다.10.2.26-MariaDB-log
.
다른 기계에서는 PHP 7.2를 실행하고 있으며,5.5.5-10.2.26-MariaDB
.
둘 다 MariaDB 10.2.26을 가지고 있습니다.PHP가 다른 이유인지는 모르겠습니다.버전 문자열이 이렇게 다를 이유가 있나요?
이것은 실제로 데이터베이스에서 가져온 것입니다.소스코드를 파헤쳐보니ATTR_SERVER_VERSION
실제 콜ZVAL_STRING(return_value, (char *)mysql_get_server_info(H->server));
https://www.php.net/manual/en/function.mysql-get-server-info.php의 댓글에 의하면
SELECT VERSION() as mysql_version
제가 먹어봤을 때 둘이 잘 어울리는 걸 봤어요.
$pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
// '5.7.24-0ubuntu0.18.04.1'
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.7.24-0ubuntu0.18.04.1 |
+-------------------------+
MySQL 버전명령어는 다음과 같습니다.
MySQL 서버 버전을 나타내는 문자열을 반환합니다.문자열은 utf8 문자 집합을 사용합니다.값에는 버전 번호 외에 접미사가 포함될 수 있습니다.섹션 5.1.7의 "Server System Variables"에서 버전 시스템 변수에 대한 설명을 참조하십시오.
-- 버전
서버의 버전 번호.이 값에는 서버 빌드 또는 구성 정보를 나타내는 접미사가 포함될 수도 있습니다.-log는 하나 이상의 일반 로그, 느린 쿼리 로그 또는 이진 로그가 활성화되었음을 나타냅니다.-debugs는 서버가 디버깅지원을 이노블로 하여 구축되었음을 나타냅니다.
MySQL에서 분기된 MariaDB는 동일한 버전 변수를 가집니다.
설명:서버 버전 번호구성 또는 빌드 정보가 포함된 접미사를 포함할 수도 있습니다.-debug는 서버에서 디버깅지원이 네이블임을 나타내고, -log는 바이너리 로그, 일반 로그 또는 저속 쿼리 로그 중 적어도1개가 네이블임을 나타냅니다(예: 10.0.1-MariaDB-mariadb1precise-log).MariaDB 10.2.1부터는 서버 버전을 위조하기 위해 시작 시 이 변수를 설정할 수 있습니다.
명령줄: -V, --version[=name] (>= MariaDB 10.2.1), --version (<= MariaDB 10.2.0)
범위: 글로벌
동적:아니요.
유형: 문자열
서버간의 미스매치는 MariaDB가 레플리케이션 서버의 문제를 해결하기 위해 추가하는 것이지만, 대부분의 클라이언트는 그것을 배제합니다.GitHub의 src 문제에서.
MySQL 레플리케이션슬레이브 코드는 핸드쉐이크 패킷으로 전송되는 버전의 첫 번째 문자를 보고 마스터가 수행할 수 있는 작업(빈 로그 형식 등)을 결정합니다.MariaDB가 10.0이 되었을 때 MySQL 슬레이브는 버전 1인 줄 알고 복제를 거부했습니다.
회피책으로서 이 버전의 프레픽스를 실장했습니다.MariaDB는 핸드쉐이크 패킷에 불가능한 조합(기능 필드의 버전 5.5.5와 "support authentication plugins")을 전송합니다.MariaDB 클라이언트라이브러리는 이를 검출하고 가짜 버전프리픽스를 투과적으로 삭제합니다.
물론 mariadb를 지원하지 않는 클라이언트 라이브러리와 링크하면 프리픽스는 삭제되지 않고 어플리케이션에 표시됩니다.
언급URL : https://stackoverflow.com/questions/57496570/where-does-pdo-version-attribute-come-from
'programing' 카테고리의 다른 글
JUnit 테스트를 통해 SLF4J(로그백 포함) 로깅을 대행 수신하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
---|---|
'shell='의 실제 의미하위 프로세스에서 참' (0) | 2022.09.24 |
여러 개의 하위 행을 하나의 행 MYSQL로 결합 (0) | 2022.09.24 |
MySQL과 MariaDB 쿼리 실행 계획의 차이점 (0) | 2022.09.24 |
fragment를 액티비티 그룹 내의 다른 fragment로 대체 (0) | 2022.09.24 |