香蕉成人伊视频在线观看|学生小视频国产区|yy女主播啪啪啪视频|麻豆传播媒体APP大全免费版官网|瑜伽牲交AV|国产欧美日韩在线天堂区|白浆精品国产91

12下一頁
返回列表 發帖
查看: 684|回復: 11

[BUG提交] discuz! X5.0 的數據庫導入問題

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
樓主
發表于 2026-3-28 08:48:06 |福建| 只看樓主 |倒序瀏覽 |閱讀模式
本帖最后由 iwuyou 于 2026-3-29 11:23 編輯

已解決,官方升級程序的BUG,新增6個表的fields json 值時,沒有設置默認值為{},造成實際數據值為空,影響后續在高版本數據庫中正常使用。

如果服務器不升級數據庫,可能不會有影響。
如果要升級高版本數據庫,可以用以下方式先行修復,以免數據庫在后續升級時或導入數據時,這6個表可能出錯而無法導入。
  1. -- 對原庫進行修復

  2. -- 批量修復表結構,設置默認值為{}
  3. ALTER TABLE pre_common_member_profile_archive MODIFY COLUMN fields json NOT NULL DEFAULT '{}';
  4. ALTER TABLE pre_common_member_profile_history MODIFY COLUMN fields json NOT NULL DEFAULT '{}';
  5. ALTER TABLE pre_common_usergroup_field MODIFY COLUMN fields json NOT NULL DEFAULT '{}';
  6. ALTER TABLE pre_forum_forumfield MODIFY COLUMN fields json NOT NULL DEFAULT '{}';
  7. ALTER TABLE pre_home_docomment MODIFY COLUMN fields json NOT NULL DEFAULT '{}';
  8. ALTER TABLE pre_home_doing MODIFY COLUMN fields json NOT NULL DEFAULT '{}';

  9. -- 批量修復空值 '' 為合法JSON {}
  10. UPDATE pre_common_member_profile_archive SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  11. UPDATE pre_common_member_profile_history SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  12. UPDATE pre_common_usergroup_field        SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  13. UPDATE pre_forum_forumfield              SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  14. UPDATE pre_home_docomment                SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  15. UPDATE pre_home_doing                    SET fields = '{}' WHERE fields = '' OR fields IS NULL;
復制代碼



------------
這兩天在mariadb 10.11.16 導出數據庫后,在mariadb 11.8.6 測試導入數據,會出現大量類似于以下的提示:
ERROR 4025 (23000) at line 7636520: CONSTRAINT `pre_common_member_profile_archive.fields` failed for `bbs`.`pre_common_member_profile_archive`。
應該是外鍵有問題,是不是官方要使用更嚴格的規范數據庫內容?

回復

使用道具 舉報

98

主題

668

回帖

27

粉絲

管理員

貢獻
31 點
金幣
75 個
產品版本
X5.0+
沙發
發表于 2026-3-28 08:49:14 |北京| 只看Ta
MYSQL兼容列表里沒有說支持這個數據庫
回復

使用道具 舉報

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
板凳
 樓主| 發表于 2026-3-28 09:00:48 |福建| 只看Ta
monkeye 發表于 2026-3-28 08:49
MYSQL兼容列表里沒有說支持這個數據庫

我現在用的是fedora server 43,用的是mariadb 10.11.16,使用discuz! X5.0正常。
下一個版本fedora server 44(下個月出正式版),將使用mariadb 11.8.6以上的版本,目前無法導入數據庫,會報錯。
mariadb 11.8.6 采用更嚴格的規范,導致無法正常導入。
回復

使用道具 舉報

46

主題

6847

回帖

19

粉絲

應用開發者

貢獻
674 點
金幣
1461 個
產品版本
X5.0+
QQ
地板
發表于 2026-3-28 09:26:56 |浙江| 只看Ta
iwuyou 發表于 2026-3-28 09:00
我現在用的是fedora server 43,用的是mariadb 10.11.16,使用discuz! X5.0正常。
下一個版本fedora serv ...

mariadb是基于mysql的,DZ的基礎邏輯是mysql,mariadb太高的版本暫時不能百分百保證。建議維持正常和mysql完全兼容的版本
回復

使用道具 舉報

6

主題

1735

回帖

4

粉絲

應用開發者

貢獻
49 點
金幣
180 個
產品版本
X5.0+
QQ
5#
發表于 2026-3-28 10:06:23 |浙江| 只看Ta
使用mysql數據庫版本會兼容性好一點
回復

使用道具 舉報

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
6#
 樓主| 發表于 2026-3-28 17:08:52 |福建| 只看Ta
fedora server 系統版本升級很方便,可以直接升級。
mysql 出了商業版本以后,很多linux系統默認改用mariadb,不用mysql,怕mysql 全面商業化。
回復

使用道具 舉報

46

主題

6847

回帖

19

粉絲

應用開發者

貢獻
674 點
金幣
1461 個
產品版本
X5.0+
QQ
7#
發表于 2026-3-28 17:17:47 |浙江| 只看Ta
iwuyou 發表于 2026-3-28 17:08
fedora server 系統版本升級很方便,可以直接升級。
mysql 出了商業版本以后,很多linux系統默認改用mariad ...

僅代表你個人意見,你要這么說,那一大堆數據庫等著接,話題就沒完了
回復

使用道具 舉報

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
8#
 樓主| 發表于 2026-3-28 20:49:19 |福建| 只看Ta
目前可能導入出錯的原因,在于字段做了檢查限制:
CHECK (json_valid(`fields`)

如 pre_common_member_profile_archive 這個表中,有如下字段定義:

  1. `fields` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`fields`)),
復制代碼


重點是里面的 CHECK (json_valid(`fields`),對數據值進行了限制。
而實際數據表中,fields 有大量空字符串,是不合格的值。應該是在重新插入到高版本數據庫,CHECK (json_valid(`fields`) 觸發了BUG。

修復辦法:
sed -i 's/ CHECK (json_valid(`fields`))//g' /backup/bbs.sql

或者導出前對數據庫中相關表,有要求使用CHECK (json_valid(`fields`)的字段空值,進行重新賦給合格的值{}。

@monkeye
回復

使用道具 舉報

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
9#
 樓主| 發表于 2026-3-28 21:15:36 |福建| 只看Ta
待測試以下代碼修復后的效果:

  1. USE bbs;
  2. SET FOREIGN_KEY_CHECKS=0;
  3. SET SQL_SAFE_UPDATES=0;

  4. -- 批量修復空值 '' 為合法JSON {}
  5. UPDATE pre_common_member_profile_archive SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  6. UPDATE pre_common_member_profile_history SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  7. UPDATE pre_common_usergroup_field        SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  8. UPDATE pre_forum_forumfield              SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  9. UPDATE pre_home_docomment                SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  10. UPDATE pre_home_doing                    SET fields = '{}' WHERE fields = '' OR fields IS NULL;

  11. SET SQL_SAFE_UPDATES=1;
  12. SET FOREIGN_KEY_CHECKS=1;

  13. SELECT '? 6張表全部修復完成!所有空值已變為合法JSON' AS result;
復制代碼
回復

使用道具 舉報

13

主題

84

回帖

2

粉絲

漸入佳境

貢獻
0 點
金幣
5 個
產品版本
X5.0+
10#
 樓主| 發表于 2026-3-29 06:45:09 |福建| 只看Ta
經測試,用以下代碼修復原有的論壇,再導出的數據,可以成功導入高版本 mariadb 11.8.6
也就是說,對要求使用json格式的字段,應該修改其值為{},以防后續高版本數據庫的嚴格檢查。
  1. USE bbs;

  2. -- 批量修復空值 '' 為合法JSON {}
  3. UPDATE pre_common_member_profile_archive SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  4. UPDATE pre_common_member_profile_history SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  5. UPDATE pre_common_usergroup_field        SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  6. UPDATE pre_forum_forumfield              SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  7. UPDATE pre_home_docomment                SET fields = '{}' WHERE fields = '' OR fields IS NULL;
  8. UPDATE pre_home_doing                    SET fields = '{}' WHERE fields = '' OR fields IS NULL;

復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

  • 關注公眾號
  • 有償服務微信
  • 有償服務QQ

手機版|小黑屋|Discuz! 官方交流社區 ( 皖ICP備16010102號 |皖公網安備34010302002376號 )|網站地圖|star

GMT+8, 2026-5-31 03:55 , Processed in 0.044367 second(s), 11 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

關燈 在本版發帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表