|
tid=187560&(1), b N% B/ U( l$ _& i, q, H7 s
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)4 @4 I% w2 N, _( l
& v5 X+ K( G2 a o9 ]/ {7 \
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers9 w: k' T& ?! \& o
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
* Y0 _( I9 t: d4 H原因:
; s( A5 v: e% }8 k! d D/ i在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:, C' s9 X; i/ p$ l) U; y {
vi /etc/my.cnf 加入下列:. _' @$ t9 H2 I1 C& f# U- ~4 Y
[mysqld]8 {/ U9 @ g# a3 T; j" n# h
- T2 s* k2 n9 D4 F+ h2 u
character-set-server=utf88 t* Y7 q) p* Z1 p/ C% |9 j8 |
default_authentication_plugin=mysql_native_password) M% Q, J+ f8 g
) M- `3 a+ z, B. y! c( B. K[mysql]4 T6 [4 @! ^+ }. S& ~9 n/ X% J
default-character-set=utf8- s1 v# y! E2 Q) C5 d( A3 M% ]
% o8 }% x" N: a
[client]5 e: B; h' D" M; Y
default-character-set=utf87 x9 I0 k5 I" j* C
: y+ i; D9 S5 ~* r然後重啟mysqld* a8 a$ D* z" L, W% _% w& H+ A
service mysqld restart' N) R' G! t7 e% t
搞定!!' F5 V: v$ V+ O+ I
, y4 \, H8 V7 m& {: Y. L註: 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 7 P& e/ w- y& ]3 A
+ Y0 F% o' ^% `
# o# o9 p5 G: q2 X w. ^
當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 即可5 t* K$ n) {4 v
, H0 Q3 o2 d' ]$ S
& w9 r/ o* M4 o' J, k" m
[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.6 X4 \* x) W; j: L/ b; d" G
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動. @- P& g. D- [- U: g" z
" X( @' J( k* s$ p3 ^(2)) g# _0 g! y( I) m6 `
(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* B# l) ~5 c- e: h1 s s
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0
+ o6 X. Y; A; i4 ?( P0 ^! ~1 Z& ~: n
4 Q% s$ t' \+ {* { M) s9 B(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 13 v+ Z# z. k$ Q& G
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 L# y) w2 B/ V5 x' | T( m9 r- ]
5 k5 }2 M% i: j! q5 q$ d
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。; G& R( m2 W6 R+ Y
$ v3 }/ C# d, K' Y第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,% q0 ~3 ^ P& }
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。 l* N! g' x- S9 T# D9 r4 Q" R
( w G# v* ^1 S第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,
0 E, { M+ k6 `! p7 `$ G將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。! O$ [4 L) m$ u8 R
: z* ]8 k+ r0 W) M. u% G' W2 T5 V% B如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。9 h/ q. H" M' F4 c
* k- q6 P0 a8 }* z7 l
為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
7 t; u8 g$ U+ G- p' D: o/ t以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤& k0 J) @, P6 T" L5 K. Z; S' {" W
|
|