PDO::_construct(): 서버가 클라이언트에 알 수 없는 문자 집합(255)을 보냈습니다.개발자에게 보고해 주세요.
Symfony 3는 MySQL을 사용합니다. "Symfony"라는 가 나타납니다.PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
PHP와 MySQL은 모두 Docker 컨테이너에서 실행되고 있습니다.
MySQL 버 :8.0.1
버전: PHP 전 :7.1.3
pdo_mysql
"문자 집합":UTF8
DSN:"mysql:host=mysql;dbname=database;charset=UTF8;"
좋은 생각 있어요?
MySQL 8은 기본 문자 집합을 utf8mb4로 변경했습니다.그러나 일부 고객은 이 문자 집합을 모릅니다.따라서 서버가 기본 문자 집합을 클라이언트에 보고하고 클라이언트가 서버의 의미를 모를 때 이 오류가 발생합니다.
https://bugs.mysql.com/bug.php?id=71606 도 참조해 주세요.
이 버그는 MySQL Connector/C++에 대한 것이므로 PHP에만 영향을 미치는 것이 아닙니다.
OK: 업그레이드되지 않은 클라이언트와의 호환성을 위해 문자 세트를 utf8로 변경하여 동작하게 했습니다.이 명령을 /etc/my.cnf에 추가하고 mysqld를 재시작했습니다.
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
2010년 답변에서 이 설정을 찾았습니다.my.cnf에서 MySQL 기본 문자를 UTF-8로 변경하시겠습니까?
받아들여진 답변이 저를 구해주었습니다(감사합니다, Bill!!!). 하지만 저는 다른 관련 문제에 부딪혔어요. 제 경험에 대해 좀 더 자세히 말씀드리고 싶었을 뿐이에요.
후의 MySQL 8.0.11을 때하였습니다.mysqli_connect()
(경우는 MySQL)에서usr/local/mysql
.my.cnf
파일을 입력하고 승인된 응답에 내용을 추가한 후 MySQL 서버를 재시작합니다.그러나 이로 인해 새로운 오류가 발생했습니다.
mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
.default_authentication_plugin = mysql_native_password
, (그래서)my.cnf
재재: :
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
default_authentication_plugin = mysql_native_password
난 갈 수 있었어!
자세한 것은, https://github.com/laradock/laradock/issues/1392 를 참조해 주세요.
ARA1307의 코멘트에 주의해 주세요.
IDENTIFIED WITH mysql_native_password, IDENTIFIED WITH mysql_native_password입니다.예를 들어 다음과 같습니다. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
저의 경우는 AWS의 RDS(MySQL db verion 8)를 사용하여 EC2를 통해 어플리케이션을 연결하고 있었습니다(제 php 코드 5.6은 EC2에 있습니다).
이 경우 RDS이기 때문에 파라미터는 AWS의 PARAMETER Group에 의해 유지됩니다.my.cnf는 없습니다.참조: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
그래서 내가 한 일은:
새로운 파라미터 그룹을 작성한 후 편집.
모든 문자 집합 파라미터를 검색했다.디폴트로는 공백입니다.개별적으로 편집하고 드롭다운목록에서 utf8을 선택합니다.
character_set_client, character_set_connection, character_set_connection, character_set_server
- 절약하다
그리고 가장 중요한 것은 재부팅된 RDS 인스턴스입니다.
이것으로 문제가 해결되었고, php5.6에서 mysql 8.x로의 접속은 정상적으로 동작했습니다.
자세한 내용은 이 이미지를 참조하십시오.
효과 있음 >
환경:
localhost
Windows 10
PHP 5.6.31
MYSQL 8
설정:
default-character-set=utf8
온:
c:\programdata\my.ini 서버 8.0\my.ini
- 하지 않음> ★★★★★★★★★★★★★★★★★★★★★★」
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
다음을 지원하는 도구:
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p
mysql> show variables like 'char%';
mysql> show variables like 'collation%';
\m/
저도 이런 문제가 있었어요.이전 버전의 PHP(5.6)를 실행하고 있었는데 PHP 7.4로 업그레이드하면 오류가 사라졌기 때문입니다.
이 명령어는 Amazon Linux 2에 있습니다.업그레이드 명령어는 다음과 같습니다.
amazon-linux-install php7.4
*nix의 다른 플레이버에는 저장소가 있을 수 있습니다.Linux 플레이버에는 Remi가 있습니다.https://rpms.remirepo.net/
mysql 및 관련 php 시스템의 복원된 백업을 테스트할 때 이와 유사한 문제가 있었습니다.mysql에 추가한 설정에는 차이가 없습니다.한동안 문제를 트러블 슈팅한 후 mysql 로그에서 mysql 설정 파일이 mysql에 의해 대부분 무시되고 있음을 알 수 있었습니다.파일 권한이 너무 열려 있기 때문에 zip 백업 및 복원 프로세스에서 모든 파일 권한이 손실되었기 때문입니다.대신 tar를 사용하도록 백업 및 restore 스크립트를 수정하면 모든 것이 정상 작동했습니다.
요약하면 mysql 설정 파일에 대한 파일 권한이 올바른지 확인합니다.이게 도움이 됐으면 좋겠네요.
같은 문제에 직면했기 때문에 다른 인증 방법인 "Use Legacy Authentication Method (Retain MySQL 5.x compatibility)"를 사용하여 MySQL 8을 재설치하면 정상적으로 동작합니다.
설치하는 동안 [Second Method of Authentication](두 번째 인증 방법)을 선택하는 것이 좋습니다.
오래된 질문인 것은 알지만 이번 주에 우리는 오래된 PHP 5.3 + Apache 웹 서버 툴을 도커 컨테이너로 이행해야 했고 php:5.6-apache를 사용해야 했습니다.
소유자가 아니기 때문에 MySQLs 원격 서버 구성을 변경할 수 없습니다.
MySQL 8+ 서버에 접속하기 위한 PHP 5.3에는 문제가 없었습니다.그래서 configs와 php_info() 출력을 비교해보니 PHP 5.4+가 mysqlnd를 기본 드라이버로 사용하여 mysqlnd 또는 mysqli 확장을 사용하여 MySQL 데이터베이스에 접속하고 있습니다.PHP 5.6에 부속된 'mysqlnd'가 문제였던 것 같습니다.
수정 방법은 mysql-client 및 default-libmysqlclient-dev 패키지를 이미지에 설치하는 것입니다.이것은 기본적으로 MySQL 8+에 접속할 수 있는 MariaDb 드라이버이며 네이티브 mysqlnd 드라이버가 아닌 PHP를 사용하도록 설정했습니다.
Docker file 에서는, 최초로 다음의 인스톨을 실시했습니다.
RUN apt update -y \
&& DEBIAN_FRONTEND=noninteractive apt install -y \
mysql-client \
default-libmysqlclient-dev
다음으로 php:5.6-apache 이미지의 빌트인 도커-php-ext-* 스크립트를 사용합니다.
RUN docker-php-ext-configure mysql --with-mysql=/usr/ \
&& docker-php-ext-install mysql \
&& docker-php-ext-configure mysqli --with-mysqli=/usr/bin/mysql_config \
&& docker-php-ext-install mysqli
나는 이것이 지역사회에 도움이 되기를 바란다.
감사합니다.
섹션 찾기[MySQLi]
당신의 안에서php.ini
행을 추가합니다.mysqli.default_charset = "UTF-8"
섹션의 요구 사항도 마찬가지입니다.[Pdo_mysql]
그리고.[mysqlnd]
.
이 문제는 특히 MySQL 버전 8.0 이상의 솔루션이 PHP 버전 7.2에서 동작하는 것을 발견했으며 PHP 7.0에서는 솔루션이 작동하지 않았습니다.
My Aws Windows에서 해결한 문제 및 단계는 다음과 같습니다.
- "C:"를 엽니다.\ProgramData\MySQL\MySQL Server 8.0"
- My.ini 열기
- [ mysql ]를 참조해 주세요.
- "no-caracter=" 브레이크 라인 뒤에 "default-character-set=utf8"을 삽입합니다.
- "[mysqld]"
- "collation-server = utf8_ci" 삽입
- "character-set-server = utf8" 삽입
예
...
# socket=MYSQL
port=3306
[mysql]
no-beep=
default-character-set=utf8
# default-character-set=
# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.=
#
# server_type=2
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
# The next three options are mutually exclusive to SERVER_PORT below.
# skip-networking=
# enable-named-pipe=
# shared-memory=
...
이 문제는 /etc/my.cnf 파일에 다음 코드를 추가하여 해결했습니다.
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
저장 후 시스템 설정으로 들어가서 MYSQL 서버를 정지하고 다시 시작했는데 작동했어요.
로컬 시스템에 접속할 때도 같은 문제가 있었습니다.
서비스 목록(Run->Services.msc->Enter)에서 확인했는데 wampmysqld64가 정지되어 있습니다.
재기동해 로그인 할 수 있었습니다.
언급URL : https://stackoverflow.com/questions/43437490/pdo-construct-server-sent-charset-255-unknown-to-the-client-please-rep
'itsource' 카테고리의 다른 글
Java에서 숫자에 선행 0을 추가하시겠습니까? (0) | 2022.09.19 |
---|---|
PHP에서 문자열을 JSON 개체로 변환하는 방법 (0) | 2022.09.19 |
MYSQL 테이블에 새 열을 추가하는 방법 (0) | 2022.09.18 |
핸들바 '각' 루프가 있는 부모 속성 접근 (0) | 2022.09.18 |
모든 목록 요소에서 int() 함수를 호출하시겠습니까? (0) | 2022.09.18 |