52AV手機A片王|52AV.one

 找回密碼
 立即註冊
查看: 433|回復: 0

[mysql] mysqld 升級到8以上遇到的問題

[複製鏈接]
發表於 2021-3-14 13:06:23 | 顯示全部樓層 |閱讀模式
tid=187560&(1)
; ~& R1 G4 p; W, U5 C4 h4 Y: Yphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
7 h0 B& `* a# ~4 [1 c( ^" K. \& H2 m
% P; E3 ]* J' t: o6 `% H
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
) z0 o/ T, b& i3 Qmysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
: e5 n; V+ B2 X# V3 U) \原因:

7 z  j- m1 d3 O) n) x7 b+ J- n在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
6 t9 A( j8 U* R7 f4 O& j3 o) Ivi /etc/my.cnf  加入下列:
4 S7 p  v( |  Q3 R6 v1 N9 Q( ][mysqld]
) |) O5 s1 z" K% l
7 |0 U" B9 f: ~6 c8 Zcharacter-set-server=utf8; \: z$ v7 X, R1 V
default_authentication_plugin=mysql_native_password. Y* F. Y5 O2 q$ u2 T
3 B+ e) a) T# i
[mysql]
. R) c1 {" ?1 n% i! E) \default-character-set=utf8
" O$ ^& l, z% Y# v4 @  ]/ i: H5 d) p
3 i# a" G! X5 U[client], N, j1 O1 W) S) J4 X
default-character-set=utf8
6 a! \7 J) T' S) {" a& `/ L9 G3 ?5 Y. J4 p# |5 Z  h* h. q3 k
然後重啟mysqld" O( j6 Q) _. L0 ?) S7 d; F
service mysqld restart
3 A+ z5 I8 `& k6 }: l/ u搞定!!
! X: P' d1 }- j2 y  q+ b1 D% Y

3 d  p! g  S' i+ y' w8 w( A註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:
註: 可以先寫支php程式以測試 ~~~
  1. <?
  2. $hostname = "x.x.x.x";
  3. $database = "db_name";
  4. $username = "user_name";
  5. $password = "pwd";
  6. $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);
  7. mysqli_query($conn ,"SET NAMES utf8");
  8. $sql = "select count(*) as total from " .  "table_name";
  9. $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));
  10. echo $rec['total'];
  11. mysqli_close($conn);
  12. ?>
複製代碼
遊客,本帖隱藏的內容需要積分高於 999999999999 才可瀏覽,您當前積分為 0

6 d0 `% C  s9 R3 m. D1 X2 o" g3 V) Q1 e* a% D

+ _0 X* N0 B  T, D" c* B( w+ `當php 7.2.24  connect to mysql server,出現 :
  1. PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
  2. Stack trace:
  3. #0 {main}
  4.   thrown in /test/connectmysql8.php on line 9
  5. Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
  6. Stack trace:
  7. #0 {main}
  8.   thrown in /test/connectmysql8.php on line 9
複製代碼
這是版本相依的問題,只要 yum install php-mysqlnd  或 yum install php-mysqli 即可4 K8 p: h8 j2 ~! C8 i( f

+ s$ a5 A1 P6 w2 m' T. K- S* L+ I: ^- w0 m5 B5 Y8 w; E  K
[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.5 n+ S, f9 G" \+ x
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動9 ?7 P7 q9 A( E( a9 E

2 d+ B+ U7 l9 w3 C. K& c(2)% r+ D0 M& G5 v; h
(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! _' G$ F1 T, p8 s9 o- O
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0! M7 q% y, F4 o# ~  X% p

# w. Z0 o! L& [6 u! s(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
! P3 R5 v' e" s5 TSELECT * 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, H. s7 T8 ], `. k' f. R

8 W5 J& ^3 u/ N# m* s/ w因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。
# d2 a5 M" x5 S9 Q
; z0 f4 D; v2 B9 Q* a: z第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,4 u5 `! ~) H8 C6 l
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。# |5 I' R( {! K& M

6 z9 q+ R. g1 S6 e. p% J4 [, J第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,: ^, k/ {  ]4 |. m) S6 P/ G
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
' I2 Q( C0 B8 U4 w2 f* t) V
5 o8 {" n0 q. R* C如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。) K' t! u& P1 W! F3 V
/ Q5 g' [/ B& o( P9 b5 L4 c: }5 X) i) P
為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
( `- @1 E1 ~0 Y" Y0 P; `" q以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤

) a: T$ d) ?2 k+ @! T
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則



中文酷站排行榜

本區塊內容依據『電腦網路內容分級處理辦法』為限制級網站,限定年滿18歲以上或達當地國家法定年齡人士方可進入,且願接受本站各項條款,未滿18歲 謝絕進入瀏覽。為防範未滿18歲之未成年網友瀏覽網路上限制級內容的圖文資訊,建議您可進行網路內容分級組織ICRA分級服務的安裝與設定。 (為還給愛護 本站的網友一個純淨的論壇環境,本站設有管理員)

QQ|小黑屋|手機板| 52AV手機A片王

GMT+8, 2025-12-6 15:44 , Processed in 0.068764 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表