男的舔女的下面视频在线播放-少妇愉情理仑片高潮日本-久久久久久国产一区二区三区-麻豆精品一区二区综合-国产精品超碰在线观看-网红极品女神精品视频在线-国产亚洲综合777-高清性视频一区二区播放-中文字幕第一页亚洲天堂

Discuz! 官方交流社區(qū)

標題: discuz! X5.0 的數(shù)據庫導入問題 [打印本頁]

作者: iwuyou    時間: 2026-3-28 08:48
標題: discuz! X5.0 的數(shù)據庫導入問題
本帖最后由 iwuyou 于 2026-3-29 11:23 編輯

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

如果服務器不升級數(shù)據庫,可能不會有影響。
如果要升級高版本數(shù)據庫,可以用以下方式先行修復,以免數(shù)據庫在后續(xù)升級時或導入數(shù)據時,這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 導出數(shù)據庫后,在mariadb 11.8.6 測試導入數(shù)據,會出現(xiàn)大量類似于以下的提示:
ERROR 4025 (23000) at line 7636520: CONSTRAINT `pre_common_member_profile_archive.fields` failed for `bbs`.`pre_common_member_profile_archive`。
應該是外鍵有問題,是不是官方要使用更嚴格的規(guī)范數(shù)據庫內容?


作者: monkeye    時間: 2026-3-28 08:49
MYSQL兼容列表里沒有說支持這個數(shù)據庫
作者: iwuyou    時間: 2026-3-28 09:00
monkeye 發(fā)表于 2026-3-28 08:49
MYSQL兼容列表里沒有說支持這個數(shù)據庫

我現(xiàn)在用的是fedora server 43,用的是mariadb 10.11.16,使用discuz! X5.0正常。
下一個版本fedora server 44(下個月出正式版),將使用mariadb 11.8.6以上的版本,目前無法導入數(shù)據庫,會報錯。
mariadb 11.8.6 采用更嚴格的規(guī)范,導致無法正常導入。
作者: 湖中沉    時間: 2026-3-28 09:26
iwuyou 發(fā)表于 2026-3-28 09:00
我現(xiàn)在用的是fedora server 43,用的是mariadb 10.11.16,使用discuz! X5.0正常。
下一個版本fedora serv ...

mariadb是基于mysql的,DZ的基礎邏輯是mysql,mariadb太高的版本暫時不能百分百保證。建議維持正常和mysql完全兼容的版本
作者: 鴻茂傳媒    時間: 2026-3-28 10:06
使用mysql數(shù)據庫版本會兼容性好一點
作者: iwuyou    時間: 2026-3-28 17:08
fedora server 系統(tǒng)版本升級很方便,可以直接升級。
mysql 出了商業(yè)版本以后,很多l(xiāng)inux系統(tǒng)默認改用mariadb,不用mysql,怕mysql 全面商業(yè)化。
作者: 湖中沉    時間: 2026-3-28 17:17
iwuyou 發(fā)表于 2026-3-28 17:08
fedora server 系統(tǒng)版本升級很方便,可以直接升級。
mysql 出了商業(yè)版本以后,很多l(xiāng)inux系統(tǒng)默認改用mariad ...

僅代表你個人意見,你要這么說,那一大堆數(shù)據庫等著接,話題就沒完了
作者: iwuyou    時間: 2026-3-28 20:49
目前可能導入出錯的原因,在于字段做了檢查限制:
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`),對數(shù)據值進行了限制。
而實際數(shù)據表中,fields 有大量空字符串,是不合格的值。應該是在重新插入到高版本數(shù)據庫,CHECK (json_valid(`fields`) 觸發(fā)了BUG。

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

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

@monkeye
作者: iwuyou    時間: 2026-3-28 21:15
待測試以下代碼修復后的效果:

  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張表全部修復完成!所有空值已變?yōu)楹戏↗SON' AS result;
復制代碼

作者: iwuyou    時間: 2026-3-29 06:45
經測試,用以下代碼修復原有的論壇,再導出的數(shù)據,可以成功導入高版本 mariadb 11.8.6
也就是說,對要求使用json格式的字段,應該修改其值為{},以防后續(xù)高版本數(shù)據庫的嚴格檢查。
  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;

復制代碼

作者: iwuyou    時間: 2026-3-29 06:57
查看Discuz! X5.0原升級代碼

  1. ALTER TABLE pre_common_member_profile_archive
  2. ADD COLUMN fields json NOT NULL AFTER `field8`;
復制代碼


應該改為

  1. ALTER TABLE pre_common_member_profile_archive
  2. ADD COLUMN fields json NOT NULL DEFAULT '{}' AFTER `field8`;
復制代碼


以下表原升級代碼都應做上述修改
pre_common_member_profile_archive
pre_common_member_profile_history
pre_common_usergroup_field
pre_forum_forumfield
pre_home_docomment
pre_home_doing
作者: iwuyou    時間: 2026-4-1 09:42
官方最新版本 2026-04-01版本,沒有修復這個隱藏的BUG @monkeye




歡迎光臨 Discuz! 官方交流社區(qū) (http://m.sdtechgong.com.cn/) Powered by Discuz! X5.0