|
|
tid=187560&(1): d6 z/ M, x6 e5 _! R9 S, }
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試) G2 Q4 m' r' G, D% I8 v# B8 p( e
3 @5 {2 _+ y- u6 L0 T7 ]mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
' x2 T9 L+ I# }' y* s5 Omysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers3 N3 ?: H3 W0 u' S8 E
原因:! {" r1 e8 n" ?% h4 l
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
9 m9 ^8 q4 i. u3 Avi /etc/my.cnf 加入下列:
% g# w n1 w9 H/ F. d) V; B[mysqld]5 q; Z7 E' B t* c ^- w
# b6 ?/ {& A+ k( C" n# h: q
character-set-server=utf8
/ N) {8 E" j/ j ?default_authentication_plugin=mysql_native_password4 f, \% d3 I2 E
0 O* I! x) j ]3 }
[mysql]
6 r' }3 a, s: ddefault-character-set=utf8& d" e6 z! y0 j3 X" J) g4 {9 X
5 z* \( i! m8 @! P" g! S( ~[client]2 ] k/ v6 Y' i
default-character-set=utf8
7 w! S3 }4 q2 t# f# O' X0 h$ g' F. p, |
然後重啟mysqld. `% U4 A+ z, g0 ` [% [
service mysqld restart5 f$ ^5 V* {' _5 T* @
搞定!!
6 }' Y) R9 t, z) `0 n/ R% B
5 ]5 R" b1 f8 q0 a- n0 [, v" G註: 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 9 p' }# k+ H- L
6 O0 F( X* c/ a7 D! W
. V+ f2 b% K0 r1 P: g9 g當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 即可
. Y% F% A2 Y9 F& s' V' m* M% o: ~3 _2 B5 q- T
2 S* C N8 N8 o[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.
8 E8 Q9 B. ~& h' f7 `說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
* y8 ?! \1 w$ N2 H8 ]& n3 A) o' t) i9 s
(2)1 a+ G: J+ @* N9 K+ L; P
(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
/ s2 U+ L# S- p/ q( NSELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>01 o" } a7 _7 [
: A( W% j+ @7 A% K& ~- t
(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
. [4 e% [$ ^2 I) S! GSELECT * 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
9 s8 ]9 w! N7 m1 ~: L% }7 Z" j
# @, z+ f" u5 q; A+ n4 [6 c因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。0 _. v6 ^9 `5 i' T1 m/ ^" C) Z4 C
5 P! m2 }7 q- F$ n/ ?$ L+ W6 [第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,
+ [3 i. E) w: ^4 y將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
0 j( P( O9 P7 X& \6 P# _1 `* y
4 k3 R4 j/ ]* E第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,) A/ N& [. }% m& z
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。: y& H5 W. W! |6 G& _& M6 Q( M
& G) J' l: M1 f% u" x3 @% ~$ U
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。/ p; y$ V+ t. a/ L9 z
9 I( \/ M3 s, r3 s! r! m+ @* @; N為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。" Z# a! N! m" ]3 v# X& V @
以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤
+ s) K- |0 A' ~9 F |
|