LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1891|回复: 5

让MYSQL彻底支持中文(slack10.1版)

[复制链接]
发表于 2005-7-29 18:49:57 | 显示全部楼层 |阅读模式
系统自带的mysql默认字符集不是gbk,因此给数据库的推广应用以及中文程序的开发带来极大的不便,在没完没了的GBK和UTF8的转换过程中消耗了我们无数的精力以及系统的资源.经过摸索尝试解决了中文支持问题,经验与大家分享一下.

先将让slack支持中文,方法可以看"置顶贴",然后重新编译mysql,原来系统mysql的要先用卸载.
login:root

shell> removepkg mysql
shell> groupadd mysql
shell> cd /app
shell> mkdir mysql
shell> chmod 744 mysql
shell> useradd -G mysql  -s /bin/bash –p /app/mysql  mysql
shell> chown -R mysql.mysql mysql


下载mysql4.x.x

shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> CFLAGS="-O3 -mcpu=pentium3" \     
       CXX=gcc \
       XXFLAGS="-O3 -mcpu=pentium3 -felide-constructors" \
./configure  --prefix=/app/mysql \
             --with--charset=gbk \
             --with-extra-charsets="gbk gb2312 big5 utf8"\
             --with-unix-socket-path=/etc/mysql.sock \
             --enable-local-infile \
             --enable-thread-safe-client \
             --enable-assembler \
             --with-client-ldflags=-all-static \
             --with-mysqld-ldflags=-all-static

//-mcpu 根据CPU类型优化编译,可以让你的mysq表现更好!可选项目很多:i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp,athlon-mp,winchip-c6, winchip2 , c3.

shell> make
------------------------------------------
    错误时候
    shell> make clean
   再回上一步
------------------------------------------------------------
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /app/mysql
shell> bin/mysql_install_db --user=root

shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> ./bin/mysqld_safe --user=root  --default-character-set=gbk &
shell> ./bin/mysqladmin -u root password 'new-password'
shell> ./bin/mysql -u root --default-character-set=gbk  -p

mysql> status
...
Server characterset:    gbk
Db     characterset:    gbk
Client characterset:    gbk
Conn.  characterset:    gbk
....
看见characterset全是gbk就算成功了.
----------------------------------------------------------------------------------------------------
在UTF8字符集的老数据库中,创建中文支持表脚本如下,对字段加上字符集说明
CREATE TABLE `test`.`cn` (
  `zh` CHAR(10)  CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL,
  `中文` INT(11)  NOT NULL
)
ENGINE = MYISAM;
注:CHARACTER SET 写GB2312 和gbk都可以,gbk优于gb2312.

对于新创建的数据库加个默认字符集声明GBK,就不用建表时候每个字段声明了,这样看起来简单流畅,没有特殊的痕迹,建议多采用这种方法.
mysql> CREATE DATABASE dbCN  DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

CREATE TABLE `dbCN`.`cn` (
  `zh` CHAR(10)  NOT NULL,
  `中文` INT(11)  NOT NULL
)
ENGINE = MYISAM;

mysql> insert into cn values("真的?",1);
注:如果这些脚本用bin/mysql命令行是输入不了,可以 用mysql query Browser,或者编程执行.
--------------------------------------------------------------------------------------------------------
shell> bin/mysql -u root --default-character-set=gbk  -p

mysql>use test
mysql> select * from cn;
+--------+------+
| zh       | 中文 |
+--------+------+
| 真的? |     1 |
+--------+------+
1 row in set (0.00 sec)

---------------------------------------------
最后修改启动文件/etc/rc.d/rc.mysqld

改路径/app/mysql/bin/mysqld_safe
改路径/app/mysql/var/web.pid

/app/mysql/bin/mysqld_safe 后面加入 --user=root  --default-character-set=gbk
发表于 2005-7-29 18:53:16 | 显示全部楼层
应该加精!
回复 支持 反对

使用道具 举报

发表于 2005-7-29 20:15:00 | 显示全部楼层

不错的帖子

谢谢分享  :thank
回复 支持 反对

使用道具 举报

发表于 2005-8-10 21:23:16 | 显示全部楼层
不错,今天才看到
实践中。。。

北南 致意
回复 支持 反对

使用道具 举报

发表于 2005-8-11 16:01:08 | 显示全部楼层
其实Mysql不用那么费劲去配置中文支持的........自行编译服务程序也不被推荐了..........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-12 10:08:35 | 显示全部楼层

我支持慎重的编译:)

  当然了,对于重新编译的问题,我也非常慎重.
  一个事实是系统自带的软件为了满足最广泛使用者,通常包括了最常用的功能模块,为了能使用几乎所有的硬件,更在编译上并没有做什么特殊的优化,系统自带软件一般以"常用模块"为基础取"广泛的适应性"而舍"性能和速度"和一些"高级模块".
  在针对特定和高负荷的的应用中,如果没有对应用软件软件进行优化,在系统测试中你会发现这些“大名鼎鼎”、“以快闻名”的软件实际效果没有你想像的那么好,甚至很平庸.
  我自己就经历过,slack自带的apache1.33进行ab测试一个静态页面结果是"300个请求/秒",在卸载1.3上2.054并进行优化编译,去掉了一些目前项目不用的模块,并增加了一些对提速有益的高级模块后,再测试同样的项目结果是"900个请求/秒".提升了300%。而mysql在应用中,一些很现实的问题都摆在眼前,我在“一楼”也说到了一些,我不知道别人感受如何,反正我觉得不舒服,所以想改变一下。
  为了更快更方便更简洁,我觉得可以在了解更多信息的基础上,以KISS为原则,对你的系统软件做针对行的优化编译,并且以测试数据来评估效果,谨慎的进行重新编译.平时多在测试环境中使用和测试你的软件.不要对一个正在"生产作业"的系统,冒然做"不加思索"的编译和升级.毕竟"学习"和"生产"是两回事.而且在取得速度的同时可能会失去一些扩展性等等,所以一定要做到心中有数,找到一个适合你应用的“平衡点”,如果你对一个重要的生产系统作了编译优化的话,你要确保你的行动是“可靠的”“负责的”。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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