|
|
(1)4 {/ r% G( Q% C- V+ j
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)3 t# ~) {8 @. G% O
9 i4 E% A! S6 l: [. w: N" Kmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers- H1 W2 M: h" ?! C- R* T
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers2 n2 m0 b. ^) v0 p: }
原因:* Q3 m2 Q8 C6 D! a s/ e
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:; _) j6 R+ S. S& r- Q8 j6 y
vi /etc/my.cnf 加入下列:
% c. G" T. s+ Y- f[mysqld]' h5 R3 F8 C" t' u
" `; j% v l5 ]* a0 Y0 N1 W* Z
character-set-server=utf8
8 M; ~ J" S4 Ndefault_authentication_plugin=mysql_native_password" |6 A. R' c4 m4 r2 y
validate_password.policy=LOW
4 ?/ t" O7 C& x7 R/ d+ @9 _. v1 u+ J[mysql]! T& x8 E1 U) ^- @; W9 F
default-character-set=utf86 M2 D- P6 @5 z/ X9 b
, s/ F. n* c: ]9 F# D4 |" N8 j[client]% Q% x: _2 H/ M. ^0 S T8 j
default-character-set=utf8, d1 @: r9 f7 n/ u
+ f2 m5 _( f6 d2 P1 c然後重啟mysqld$ L- ?+ _! z+ h7 r: o
service mysqld restart& _: W- A8 }2 j, h! Q0 l9 f
* _% i( S% h- [, q( P1 j6 R
重啟後可能須做下列動作:
, L/ Q0 T# q( O: I+ M! Bmysql -u roor -p v' d7 H4 A7 |4 m
SHOW VARIABLES LIKE 'validate_password%';( K) {+ P4 X* S8 q
SET GLOBAL validate_password_policy=LOW;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';搞定!!
' m+ x* a- U; m! K& |
, C7 L( S) T- p' K/ E& h註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:註: 可以先寫支php程式以測試 ~~~
8 e" K6 ^) |* ~1 b" D, [3 s- <?; R2 W# V; x, i6 p" r3 j/ P
- $hostname = "x.x.x.x";4 ~/ [8 c* Y- ~/ S! g2 K D
- $database = "db_name";9 u/ S2 f: l6 Y. I
- $username = "user_name";
9 P7 j+ z: M0 I - $password = "pwd";
, j: E( B9 b4 L, [
t4 L, A: y6 o2 B$ I2 |- $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);9 |' e8 c$ o/ b8 N7 ~( ^$ T% @! _! t' d
- mysqli_query($conn ,"SET NAMES utf8");
. W, L# O7 m4 A8 k& E- {
# u8 t: p8 m$ O# _% B% x& ~! X" p1 t- $sql = "select count(*) as total from " . "table_name";
2 l U( q7 ~) a/ s! v# e - $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));5 y/ o# e6 K3 V: d/ ]! r/ E1 \
- echo $rec['total'];
5 u' `% x+ l! M& c7 _ - mysqli_close($conn);7 C5 h0 `. U) u- ?$ H
- ?>
複製代碼遊客,本帖隱藏的內容需要積分高於 999999999999 才可瀏覽,您當前積分為 0 m3 H5 P! X$ k1 W. q3 J4 m- K3 K; z: o
1 `+ Q' e6 T4 L$ b- \
8 l( J" `8 ]8 Y8 j5 T: Q$ l( J' q
當php 7.2.24 connect to mysql server,出現 : - PHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9) _. l7 t! q- U# `! ~6 L5 ^
- Stack trace:
( z6 G+ [9 V5 v ^/ m - #0 {main}
( v" u5 v7 A+ S( G - thrown in /test/connectmysql8.php on line 9/ y( ^: g5 [- Y, {! [5 M
- , ?1 W+ L$ Q8 q* [
- Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
! Y* E: k' s; p8 N! L2 {' W - Stack trace:
_5 p, @0 r5 Y+ s5 ` - #0 {main}
& u% q4 e5 [& [ - thrown in /test/connectmysql8.php on line 9
複製代碼 這是版本相依的問題,只要 yum install php-mysqlnd 或 yum install php-mysqli 即可
* I7 j% |! h3 V, Y: _; x, |; d: ^/ G5 W( O n
+ M6 K8 k# t* {5 E4 e) 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.
1 I* N+ F1 _9 P- p1 c說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
8 k+ ]9 W1 o3 x+ o; g/ i- i
y' S2 z+ Q- p3 a) ?$ m# v$ D(2)
5 F9 v$ H/ `- |$ B9 D(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
0 p% b0 d% c3 i" n, A* K4 Q8 iSELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0, _2 }$ _$ t( M4 f
0 U' x3 l! M6 c0 _- R ^
(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 10 ]) @5 _( ~' h# E$ D
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 17 H# d: r: A0 o
* I s6 W' ?2 |/ u: G$ c
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。
' i) D8 |0 `, R7 B& M$ l! d. ?! B2 r) x
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php," w' S/ f3 \& P& }9 Z2 k
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
3 `* E+ d, @- Y2 E* q' ^
- X( H" p$ l9 O$ J# R4 I第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,
% H& U7 y- q# y, Z: Q/ i將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
, {) ?. v4 x% b( z# N: G) K. y8 ~# @- {
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。3 H& p' m. _; {4 z
: k, c o" T! G$ F3 ]5 Z# p2 _1 `為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
. p8 Q' x2 R6 |以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤# f# Y8 B: }; \( | ~( ?6 t
; W: z, v5 _. l: F+ x' e, r
- q$ j! r- ^& `! U( X% D
$ V5 ^8 H- U! R n' f
5 w2 ?1 }" O6 ?: c- i3 B/ \ |
|
|