|
|
tid=187560&(1)2 j/ S8 b9 G9 p. N/ @- v
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
. V* C5 F2 N2 z
9 H/ \4 _! A$ P& c5 S m c4 Emysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers& a' n2 m6 l. u" B4 O% }
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
$ e y1 R. E- Z; C4 A+ q1 K原因:
Y5 E3 x4 W* }7 R6 W在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:9 e0 e7 F5 h- _" a5 b7 E
vi /etc/my.cnf 加入下列:5 l. C# [$ r0 z' g
[mysqld]% Y4 ~; [3 N0 s/ i1 w+ ?: H W
+ O4 Q3 [* ]) a+ l) J4 a, p Ycharacter-set-server=utf8
- }& i$ L7 P3 T! g8 b- S# ]default_authentication_plugin=mysql_native_password! `1 d8 c* J& i. I4 y
# t- q v) M. w! s% G
[mysql]+ @# @. ]$ D* M4 I) y
default-character-set=utf89 d' D4 i5 J" s7 o9 @" U
% \ o5 S) v; V" a! W0 T6 N5 V- K[client]
& L$ m8 X- W7 N8 D6 t8 y1 |default-character-set=utf8
' E" t: k9 W/ R4 j v% X; m2 s: x4 w
然後重啟mysqld x+ b, c- B7 Q) C. B% c8 f$ N2 {' d* j
service mysqld restart
, z' r s' Z0 _! v" F( H* C搞定!!$ }4 ^6 `! x5 H' B- A7 s4 X
+ g: n0 k: a6 R6 \; d註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:註: 可以先寫支php程式以測試 ~~~- <?
- $hostname = "x.x.x.x";
- $database = "db_name";
- $username = "user_name";
- $password = "pwd";
- $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);
- mysqli_query($conn ,"SET NAMES utf8");
- $sql = "select count(*) as total from " . "table_name";
- $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));
- echo $rec['total'];
- mysqli_close($conn);
- ?>
複製代碼遊客,本帖隱藏的內容需要積分高於 999999999999 才可瀏覽,您當前積分為 0
( k" X0 A [7 M1 H0 h
; h+ t# i' J% D4 o B7 @8 g' ~! L
( U7 z% L4 f6 A當php 7.2.24 connect to mysql server,出現 : - PHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
- Stack trace:
- #0 {main}
- thrown in /test/connectmysql8.php on line 9
- Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
- Stack trace:
- #0 {main}
- thrown in /test/connectmysql8.php on line 9
複製代碼 這是版本相依的問題,只要 yum install php-mysqlnd 或 yum install php-mysqli 即可
4 _' {4 C8 T- [+ ~8 p0 ]. A
. U4 d& }- d9 d8 T+ s0 n+ I
- M9 S8 m+ x8 T1 s# j[Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
# O4 `) D4 s6 c) r說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動9 t! v, C( D: y) |3 v, O) p
3 U& i B6 m5 X, d(2)
* `; K4 [6 B8 x(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'system>0' at line 1! E" q( E3 D6 O1 G* F- }: h
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0
0 Y ^1 c, i; k
% Q% b8 {* G1 [& S: `0 \(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups = '' AND starttime<=1532077291 AND (endtime>=1532077291 OR endtime=0) ORD' at line 1: f @6 S0 W+ S6 k
SELECT * FROM forum_announcement WHERE type!=2 AND groups = '' AND starttime<=1532077291 AND (endtime>=1532077291 OR endtime=0) ORDER BY displayorder, starttime DESC, id DESC LIMIT 1
2 M3 [- |3 @* n
1 `7 T' S7 |2 d; V. u# J0 m因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。' ]" P' t+ |: D. ?& P
$ X5 y) e5 R! p/ ?! r第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,$ n! {) \6 C9 O$ w
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
* r X8 W ?& Q/ m6 c9 ~+ [/ |3 r8 i! d- O" I2 b3 J
第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,: z, y5 H: r4 v- m! e! @$ P" {
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
' f" u" J N$ b. U& M$ g9 M
! y+ A7 M+ B( o7 O/ ~如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。
! |$ K* [# J2 L- X: }* I
& D% t! o' R o9 Q為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
( E) I/ \+ b, f5 N2 z! `以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤
& F. }2 |+ l8 q+ Z$ \ U |
|