电影中心 精品软件 联系我们

 找回密码
 立即注册
搜索
Close
查看: 1164|回复: 1

以DiscuzX2.5为例,轻松转换数据库编码,实现GBK和UTF8互转

[复制链接]
  • dsu_paulsign:ta_mind

    2026-4-28 04:25
  • dsu_paulsign:classn_01: 5 dsu_paulsign:classn_02

    dsu_paulsign:classn_12: 1 dsu_paulsign:classn_02

    [LV.2]偶尔看看I

    发表于 2014-6-11 23:41:08 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    4 ]8 E1 [& N) g/ Q  z+ D0 O经常遇到有人需要在常见的GBK和UTF8之间转换,这里以
    discuzX2.5为例,由SC_UTF8转换为SC_GBK,结合我自己的一些经验,提供一个较为建议的数据库编码转换方法,此方法不求通用,却能解决大部分中小站长遇到的类似问题
    ; W3 b5 j! w; x0 p# j$ a; B5 B
    总体思路其实挺简单的,我们先通过SQL语句获取到数据库里面的全部表名,然后对所有需要转换的表执行一次对应的编码转换。4 M4 B2 |! u: O+ c0 R( [1 C* L2 c
    ; \  o) D6 a) H$ g0 g4 N- [1 B, |% C
    这里我们使用到的工具是Navicat for mysql  10.1,这是一个非常好用的数据库管理工具,稳定易用,适合新手  \" I% L, x  k# X; z& r

    , P4 w. ]  d% i& }5 `2 E; z( Y: z: X; w* B. ]" F( Z$ t' i; x
    获取数据表名( D; h4 p3 [  ?0 @% c
    ; U( n; S( |7 n5 G& W/ p* u6 l

    ! [3 w( \! O" M! C  D- E  R& I开始前,请先仔细阅读文末的注意事项。
    9 T5 D6 V, Z$ o/ R2 N
    $ z0 j; k" I) aDiscuz的数据表比较多,为了能批量转换,这里我们先想办法获取一下全部表名。当然,这里使用到的方法并不是单纯读取表名,而是生成一串带有这些表名的SQL语句,以便下一步能使用。
    ' z- T$ t0 D( c; Z' t
    6 u3 A+ o8 s2 @7 ?' S: M我们用Navicat连接上我们的数据库,然后执行一次查询,查询用的语句如下,然后下面有对应的操作图例。
    " \+ k0 t+ V; b* ^: q! q) S, E( }  r$ k; q& m% z! h! Z

    + O; ?2 X5 T9 L' Z9 U6 D1 R1 ^5 X
    - c+ n# q  K; ^% F0 v1 W: m

    3 t3 S8 a: n& N7 r' j' T3 p+ o
    $ h( F2 \% `* v4 }( x% _' @

    8 y$ ^: J8 ?* H& W* ?! J  Z# o3 Q

    9 F. o! j; t8 R3 O$ h9 F9 g! B0 {) t+ Y) O7 n% t0 g" h

    . r( }# x' t: o+ j, t2 _3 A3 c3 T
    ; ?! m' _8 C7 f; ?% N

    , Y, l. y4 A! }- |  ^8 Q) B1 z7 _" W4 ]* U, v+ @5 {
    ' P% t8 F. Y6 n$ v: s  E" O
    % e" \2 X# H* J9 ?3 R" |+ z

    6 Z6 a, ]" a3 H, h" }/ m8 F! e% }/ g% F' a$ g. H0 S4 F4 Y5 D
    ' b) N* h$ W& D) _7 p

    9 P& u2 ^; {+ }) _; O$ ?

    / o$ q! R: d& _: r( r2 k% d2 w) Y, f& z: \8 o) Y' |1 t
    * _+ D( t6 H9 `# b- X+ b) B3 x
    游客,如果您要查看本帖隐藏内容请回复

      u* h3 b4 q0 h, q& I* Y
    3 B* Z1 _+ c1 Q3 L( c4 g这个语句里面需要我们注意一下的是pre_这一段,这里是特意指定一下特定的表前缀,DiscuzX默认的是pre_,如果你改过,就把这里改成你的
    8 \% N" S& l7 L& m# H0 G 232924avfcrcsynti1putu.png.thumb.jpg ' O# i  j% q) A0 `2 U. ^& f

    - |+ O  c* O; ]. j
    * k- E( X- h6 ?6 o, A7 z, A0 ~' q5 j8 A 232925vx9wzfbjo0fb0ptb.png.thumb.jpg $ U, h: E, x1 n7 |. M& l& A3 G

    , C  @3 x4 E; i/ Y+ E0 K5 p. D' a" ]5 W, X" `+ i5 [
    232926u1pzj6e4lai4i6ew.png.thumb.jpg 5 U  k7 N8 m4 c( Y$ H. ^

    ' \0 z3 z0 s0 u& g0 C. i( C9 R
    * Y! ?* j" o! {; n2 Q9 s执行完上面的语句后,我们就会得到如上图的结果,我们把区域3中的内容全部复制出来,这里可以使用ctrl+A多选,然后右键复制即可。内容复制出来后,我们将内容贴到一个txt里面。
    2 O# D7 _8 J/ S2 d+ ]1 l
    $ @3 f" s' c* m! y" ^# c 232927j6akuh0uusug3039.png.thumb.jpg
    8 u7 m  H5 M) y7 t/ v; v
    , t/ g9 @4 m# V; ~; u& o& }- G. s4 S8 ^( l
    232929nz13g46g2ieh46pq.png.thumb.jpg & \' P1 ^* E$ G* f) q/ Y
    / G! _* p! y: F8 T

    8 l/ m0 L7 X5 k贴到txt里面后,用记事本的批量替换功能,将其中的    RENAME TO  111 这一段替换为DEFAULT CHARACTER SET=gbk COLLATE=gbk_chinese_ci,这一段是转换为gbk,如果你是从gbk转换为utf8的话,则相应的替换为DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci即可,如上图所示。
    ( T( |# {  s2 H: ]9 G' W9 r# J
    ) [* Y( \% v, c. w- @9 |: @转换数据库编码7 K5 }/ `. A% X! y: R
    . f& R  t( S5 j# F4 G* v8 n6 f
    接下来我们将批量替换好之后的所有语句再复制到Navicat的查询器内执行,这个查询器就是我们上面步骤有用到的查询,如下图例% H- P4 V8 K' P! M  r0 q2 I
    3 F# Y, `& y7 B" a% E- m
    232931nkdhi6qpiqdrhih6.png.thumb.jpg 9 p; a) _  k3 o+ w: Z5 S6 _4 b; T

    % W) v) U8 t) M, o; Z5 p8 Y2 o
    $ @  t1 |4 X6 A; q, ^接着我们只需要等语句执行完毕即可。& a* g: S6 `. K8 ^$ D

    ' M2 c' _4 j0 l  S2 y% `0 \( V注意事项
    9 R6 l" r& X+ E, {" V3 f" L+ |5 N7 f/ @; e2 t
    1、执行此操作前,请务必先完整备份数据库,以免转换过程中出现差错造成数据丢失等问题。+ R/ q) {( G4 Z5 u
    + _: z  Y+ _- N. _2 s, @
    2、转换过程中应尽量避免再对数据库进行读写。
    ( W: Y$ k8 p* F& I6 ]" A! a* q/ N& {0 G4 K
    3、最后的转换步骤有可能稍微需要一点时间,视数据库性能和大小而定,需要耐心等待。/ K9 Y( l3 j8 v
    * H  f. K/ f  C7 }& i1 A
    4、此方法仅针对数据库,如果你是要完整转换一个DZ,还需要替换所有的文件,包括模板和插件,需要仔细更新所有缓存。
    . M" G1 G8 x6 X6 C3 D7 c4 o& [, a2 D1 m2 z: f/ [
    5、本方法不完全保证100%安全性,仅按个人经验提供方法,遇到问题责任自负。7 h* _( U+ q$ O, o9 q
      |- b- ]9 w: g% C4 T  S* w

    dsu_paulsign:classn_11

    发表于 2015-3-29 15:27:25 | 显示全部楼层
    不晓得。。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|帮助|古城IT技术联盟 ( 鲁ICP备06030014号 )

    GMT+8, 2026-5-23 05:12 , Processed in 0.058821 second(s), 13 queries , Gzip On, Redis On.

    52occ.com Team 古城IT社区自优化Ver.

    © 2006-2026 LonHowe.com

    快速回复 返回顶部 返回列表