Symfony 3 애플리케이션에서 MySQL 데이터베이스에 연결하려고 합니다. 하지만 Symfony 콘솔 명령으로 MySQL 스키마를 생성하려고 하면 다음 오류가 발생합니다. PDO::__construct(): 服务器发送了客户端未知的字符集 (255)。请向开发者报告
PHP와 MySQL은 모두 Docker 컨테이너에서 실행됩니다.
MySQL 버전: 8.0.1
PHP 버전: 7.1.3
운전기사:pdo_mysql
캐릭터 세트:UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
어떤 아이디어가 있나요?
P粉3646420192023-10-17 09:06:36
MySQL 8.0.11로 업그레이드한 후 PHP의 mysqli_connect()
函数时遇到了与OP相同的问题。在我的 MySQL 目录(在我的例子中,usr/local/mysql
)中,我创建了 my.cnf
파일을 사용하고 허용된 답변의 내용을 추가하고 MySQL 서버를 다시 시작했습니다. 그러나 이로 인해 새로운 오류가 발생했습니다.
mysqli_connect():服务器请求客户端未知的身份验证方法 [caching_sha2_password]
라인을 추가했는데 default_authentication_plugin = mysql_native_password
,所以 my.cnf
이제 다음과 같습니다:
가서 너무 신난다!
더 많은 참고자료: https://github.com/laradock/laradock/issues/1392
ARA1307의 댓글을 참고하세요:
"새 사용자를 생성하고 "IDENTIFIED WITH mysql_native_password"를 명시적으로 지정하고 기존 사용자를 변경해야 합니다. 예: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
"
P粉8845486192023-10-17 00:27:36
MySQL 8은 기본 문자 집합을 utf8mb4로 변경합니다. 그러나 일부 고객은 이 문자 집합을 모릅니다. 따라서 이 오류는 서버가 기본 문자 집합을 클라이언트에 보고하고 클라이언트가 서버의 의미를 모르는 경우 발생합니다.
참조 https://bugs.mysql.com/bug.php?id= 71606
이 버그는 MySQL Connector/C++에만 해당되므로 PHP에만 영향을 미치지 않습니다.
올바른 해결책은 클라이언트를 업그레이드하는 것입니다. 하지만 그동안 업그레이드되지 않은 클라이언트와 호환되도록 서버의 문자 집합을 utf8로 변경하여 작동하게 했습니다. /etc/my.cnf에 추가하고 mysqld를 다시 시작했습니다:
으아악2010년 답변에서 다음 설정을 찾았습니다. my.cnf의 MySQL 기본 문자 집합을 UTF-8로 변경하시겠습니까?