|
|
tid=187560&(1)
6 t- n" J2 |/ l0 yphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
4 D: w- g g( @- `9 f$ o7 e+ m; [- d- H" S' M
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers8 x' }( G% N. Z; |
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
; |7 h1 g% b) Q1 ?7 N" h0 g( l2 ]原因:3 t+ J/ a7 L0 [% P2 o
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:; |: D# y& `1 t+ y, t g1 x" {
vi /etc/my.cnf 加入下列:0 p E6 `: s! F J5 g* h
[mysqld]8 b5 Z* i3 i" @/ |
& o v$ H# Z n# w
character-set-server=utf81 p: Z5 K6 M' m5 z3 z& m( G1 x9 g
default_authentication_plugin=mysql_native_password. {7 P# T0 |; J7 J2 b4 l. c" z/ L
5 o3 H& z* K; b x3 s
[mysql]/ F, X$ \9 m; b, Y- ?% W; E& P# ]5 P
default-character-set=utf85 T; G' c5 A! k
% d5 B, J) W4 K; E+ F& \* X' S[client]
8 y& s0 N0 [ o- Cdefault-character-set=utf8- e! R: e* b+ U. _% [& J- z
3 O& A1 b) H' A) t1 e% n$ ~然後重啟mysqld8 C7 h, s% T! ^ i# `
service mysqld restart$ r: u; |; C4 W& c+ I0 X
搞定!!$ }- X' r- B0 ?: B
) C3 r- Q( Y' A3 i6 {
註: 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 # k6 R. c/ A2 i) E: i
; c* ]& S0 _+ T N) [0 o
% [0 k/ e* N& w% 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 即可6 e. M+ a" n2 z/ B; _4 M/ A; ?
! g. T* c5 C! n; S7 h4 [( C, n
7 J# F! ~. ~3 L( `$ z
[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.& ?. z f0 u! _8 f; o3 \
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動; i/ T+ M6 E& N
9 [5 e0 Q( @" n( w! ~1 j8 x$ S(2)5 u* \% h- ?' ~$ w; o$ X; _9 Z% S8 _
(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' X3 @" e# |" \+ |
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0
: H. E' |. H/ r, E, _ g; H1 C0 ^* p3 `2 ^
(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
8 w3 w4 X6 t5 x/ m1 O+ `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
7 O& y" o" m6 p% c5 |8 q% X+ u8 |0 u
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。
) g" W* M( ?3 n. t/ b& K
) j; O; A+ m+ E& ?- k7 e第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,5 t0 B8 p8 ^' y& ?2 K
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
/ O. |& j/ M5 \' r6 q! [
* p% b. Z) i7 `: C第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,
- b* G8 ~1 P$ v$ _, k5 n將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
' v+ Z0 V! d( @6 j- T* f" F% Q* @3 K" Y% v
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。* f+ {. Y# H4 Q/ s; i3 m4 r
' {4 s9 f9 i% c9 B為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
7 k% R# Q9 z, K以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤! t! F" ]" y, s1 \& H+ b
|
|