|
tid=187560&(1)
6 I$ b# v$ _- X8 |8 D( r/ f0 i' \. cphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
1 I0 N4 E/ r0 F9 k0 b n/ ]' G& V5 K
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
; L% U4 C" R' k' ]( M. v& ymysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
& ?( @4 h/ t) t, _原因:
* X3 L4 M- y% ~9 e2 }5 K在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:3 G1 M- v/ {6 k/ L7 |* U6 q3 n( m0 g
vi /etc/my.cnf 加入下列:1 j4 ~8 b5 e; G; ~& |# D) s# p
[mysqld]/ B4 d# O4 }( ^; ]9 f9 U
" |, E% s- }+ A' h4 b% Z4 }1 d
character-set-server=utf8
4 F r5 V: F" J. z/ _% cdefault_authentication_plugin=mysql_native_password
$ z" z* d( G [/ a9 J; l- S
0 H5 V( U' C+ q4 C# m1 t[mysql]9 ]" Z1 I1 _, `+ A) J4 p& c ?
default-character-set=utf85 ~* x- K6 S( M# s* d( z6 k; T
3 B5 X! D# x* u7 `2 Z n5 t8 q
[client]
) Y* r/ }( t8 f v" T1 Hdefault-character-set=utf8
. T7 Z! _4 c6 q
& Q0 I7 B2 s6 E4 H1 u1 B然後重啟mysqld/ J# U: H( @; a) `
service mysqld restart: {+ d" l. m% J
搞定!!" r2 W0 \1 F6 w% G5 x3 X$ F
5 i7 k9 r" o/ t註: 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 3 M* U0 ]. R# f: w
" F0 F2 c! o1 x6 H7 |
) ?- F' W1 |1 d5 f
當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 S* Q- Q/ `, V0 j* j" n
2 C; Y" R: o- O9 W. |, ]( `6 Q1 L+ d' [0 Z( |1 t& |2 u
[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.% R- k' g& r- i! @! |
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
% I( M, b Z9 H: D. w' u& D3 ^! c+ b F* V( \, l: i9 L9 Q( @. G- R5 }+ d# F8 ^
(2)3 ]! J$ i( v2 g" @6 |
(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
; Y) g* ~# m: rSELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0, j" f& K# O L! r: a
2 u; b3 O" x& D( Y6 m, ?(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) E. S g- t/ R+ O x
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: ?! W3 }1 H# V8 V0 m' z
. F$ b) o5 S/ l& |* n
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。/ M- `$ B1 \9 p; S
& N- P; g0 _- X* r8 \
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,! i$ x# f- f/ f
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
0 L+ O4 @% U, b3 z& E
& L7 L) M2 H8 r第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,) i8 h: \. U8 | P' p% U4 ~
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。. D `, t9 n: n/ S
: @2 X" G) \) Q; P* o如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。: f) n3 u" n% ^/ _& }5 U: i3 y
1 }& Q. n8 D% @- k1 p- E為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。; H5 e D: F+ b, v
以上參考: 升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤
+ Z3 Q0 F3 o/ N+ M4 R |
|