Saturday, November 5, 2011

freebsd8.2 安装mysql55后修改默认编码utf8

根据160630的patch状态回帖.可以编辑my.conf来更改默认的新建数据库编码

State Changed
From-To: open->closed
By: ale
When: Tue Sep 13 14:56:05 UTC 2011
Why: You should use my.cnf for this config params.

具体参考 : freebsd mysql5.1 与mysql5.5的参数变更

使用如下patch给/usr/ports/datebase/mysql55-server/Makeconfig就可以了


diff -urN mysql55-server-old/Makefile mysql55-server/Makefile
--- mysql55-server-old/Makefile    2011-09-10 14:38:44.000000000 +0000
+++ mysql55-server/Makefile 2011-09-10 15:16:00.000000000 +0000
@@ -53,6 +53,12 @@
 .if defined(WITH_FASTMTX)
 CMAKE_ARGS+= -DWITH_FAST_MUTEXES=1
 .endif
+.if defined(WITH_CHARSET) && ${WITH_CHARSET} != ""
+CMAKE_ARGS+=       -DDEFAULT_CHARSET=${WITH_CHARSET}
+.endif
+.if defined(WITH_COLLATION) && ${WITH_COLLATION} != ""
+CMAKE_ARGS+=       -DDEFAULT_COLLATION=${WITH_COLLATION}
+.endif
 
 # MySQL-Server part
 .if !defined(CLIENT_ONLY)

然后编译的时候,使用
make WITH_CHARSET="utf8" WITH_COLLATION="utf8_unicode_ci" install clean

参考 :  ports/160630: [PATCH] databases/mysql55-server Add WITH_COLLATION and WITH_CHARSET

以往在freebsd中安装databases/mysql55-{server,client}时,需要如下的参数 :


make WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci WITH_XCHARSET=complex install


不过因为在 MySQL 5.5.8 以后的 build system 改成了 CMake,导致 ports maintainer 必须重新设计 Makefile。
而目前的 Makefile 尚未设计完善,所以想把这些 options 传递給 CMake 的话,只能直接改 Makefile 解決:


--- mysql55-server/Makefile.orig       2011-03-19 21:13:47.000000000 +0800
+++ mysql55-server/Makefile    2011-04-08 14:31:05.815962791 +0800
@@ -39,7 +39,10 @@
                -DINSTALL_SQLBENCHDIR="share/mysql" \
                -DINSTALL_SUPPORTFILESDIR="share/mysql" \
                -DWITH_LIBEDIT=0 \
-               -DWITH_LIBWRAP=1
+               -DWITH_LIBWRAP=1 \
+               -DDEFAULT_CHARSET="utf8" \
+               -DDEFAULT_COLLATION="utf8_general_ci" \
+               -DWITH_EXTRA_CHARSETS="complex"
 
 .ifdef USE_MYSQL
 .error You have `USE_MYSQL' variable defined either in environment or in make(1) arguments. Please undefine and try again.

如果在做这修改前不小心把沒设好的 MySQL 整套装起來的话,请记得把 mysql55-client 也砍掉一起重裝。
特別是对那些真正需要用到 WITH_EXTRA_CHARSET="complex" 的人,有一边沒弄好的話,网页上就准备出现一大堆「???????」了。
至於是否能像以前那样直接用 make 送參數,就只能慢慢等 maintainer,看他何時會重新把所有 options 對應上去了。


通过使用port来安装
1.该ports 做得不是太好,不支持 make config 修改选项,只能在命令行用
make WITH_CHARSET=gbk WITH_XCHARSET=all 追加参数,或者直接修改 Makefile文件。

2.WITH_CHARSET=gbk 是将mysql的服务及数据库的默认字符集由latin1改为gbk;WITH_XCHARSET=all 是将mysql软件包所带的字符集(包括gbk 和 gb2132)都释放出来。
mysql 不是真的不支持中文,只是采用了utf8字符集而已。 所以不建议你改变默认字符集,应由程序(如PHP)在连接数据库时选定合适的字符集。如,在config.inc.php之类连接参数文件中设定 mysql_query("set names gbk");改变默认字符集可能导致有些外国编的软件如VBulletin3.60运行错误。建议你在mysql5编译时只增加 WITH_XCHARSET=all 即可。

3.应用 make clean 清除配置(假设你以前编译过)
然后 make WITH_XCHARSET=all
最后 make install 安装编译好的软件包(如你以前以前安装过,最好用make reinstall)

4.如你用phpmyadmin导入以前的数据(gb2132 或gbk格式),在创建数据库时务必将默认参数“整理”改为gbk_chinese_ci
5.可以尝试修改my.cnf文件来改变服务器以及客服端的字符编码
[client]
...
character-set-server=utf8

collation-server=utf8_general_ci

default-character-set=utf8
[mysqld]
...
character-set-server=utf8

collation-server=utf8_general_ci

default-character-set=utf8
[mysql]
.......
default-character-set=utf8

No comments: