荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (I want to believe...), 信区: Linux
标  题: MySQL 中文字符处理模块 v.1.1(转寄)
发信站: 荔园晨风BBS站 (Mon Oct 15 22:15:07 2001), 转信

【 以下文字转载自 jjksam 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: newclear (clear), 信区: Linux
标  题: MySQL 中文字符处理模块 v.1.1(转寄)
发信站: BBS 水木清华站 (Sun Oct 14 21:53:27 2001)


ftp://ftp.gnuchina.org/incoming/mysql_zh By NewClear/mysql_zh.1.1.tar.gz

MySQL 中文字符处理模块 v.1.1 (Not Support Win32)
==========================================================================
在原1.0基础上加入两个函数,可以获得汉字的拼音首字母。

MySQL 中文字符排序模块 v.1.0 (Not Support Win32)
==========================================================================
mysql_zh:
mysql_zh是一个供MySQL使用的用户自定义函数,通过一个将中文字符串转换成一个
特殊的字符串,在MySQL的ISO-8859-1 ( Latin1 ) 字符集下进行中文字符串的排序
的一种实现方式。

由于MySQL默认情况下使用ISO-8859-1 ( Latin1 ) 字符集,在这个字符集下进行中
文排序的结果不是按照拼音顺序进行,使得在MySQL中进行中文排序比较麻烦,大致
有两种做法:简单一点的做法是将字段类型改为binary,但是这样英文查询的时候将
大小写敏感,使用起来非常不方便;再就是重新编译MySQL,使其使用GBK字符集。

这里给出的是第三种方式,通过一个外挂的MySQL自定义函数(UDF),实现中文的排序,
比之以上方法都要简单易用得多。

由于MySQL的Win32版本不支持UDF,所以本模块不支持Win32系统。

安装:
==========================================================================
1. 将打包的文件解开到一个目录中
2. 运行make.sh重新编译模块
   (如果不愿意编译,也可以直接使用压缩包中所带的mysql_zh.so文件)
        ./make.sh
3. 如果安装过老版本的mysql_zh,关闭MySQL。
    /etc/rc.d/init.d/mysqld stop
                (命令依系统环境可能有所不同)
4. 拷贝mysql_zh.so文件到ld命令寻找的目录中,建议使用"/usr/lib"。
        cp mysql_zh.so /usr/lib
5. MySQL没有运行,或者第3步时将MySQL关闭了,启动MySQL。
        /etc/rc.d/init.d/mysqld start
                (命令依系统环境可能有所不同)
6. 进入MySQL安装UDF,如果安装过老版本的mysql_zh,原有函数不必再次安装。
        CREATE FUNCTION zh_int RETURNS INTEGER SONAME "mysql_zh.so";
        CREATE FUNCTION zh_str RETURNS STRING SONAME "mysql_zh.so";
        CREATE FUNCTION zh_ch RETURNS STRING SONAME "mysql_zh.so";
        CREATE FUNCTION zh_py RETURNS STRING SONAME "mysql_zh.so";

使用:
==========================================================================
zh_int(str):
--------------------------------------------------------------------------
        返回与第一个参数对应的一个整数。
当参数为字符串时,
        如果第一个字符为汉字,返回字符串第一个汉字在GBK字符集中按照拼音排
                                                序的序号(序号最小值为256);
        如果第一个字符不是汉字,返回第一个字符的ASCII码;
当参数为整数时,直接返回第一个参数;
当参数为浮点数时,将第一个参数取整后返回;
当参数为NULL时,返回NULL。

        使用范例
        SELECT * FROM table1 ORDER BY zh_int(col_with_chinese);
                (只对字段col_with_chinese的第一个字符排序)
        SELECT zh_int("中");
                (返回"中"所对应的GBK排序序号)
        SELECT zh_int(100);
                (将直接返回100)

zh_str(str):
--------------------------------------------------------------------------
        参数为一个字符串,可以为NULL,但不能为数值。
        返回经处理过的中文字符串,使用处理过的字符串可以在ISO-8859-1(Latin1)
字符集下正确的进行中文的按拼音排序。
        返回的字符串是不可读的,即使原字符串为英文也是一样。

        使用范例
        SELECT * FROM table1 ORDER BY zh_str(col_with_chinese);
                (对字段col_with_chinese的按拼音顺序排序)

zh_ch(str):
--------------------------------------------------------------------------
        参数为一个字符串,可以为NULL,但不能为数值。
        返回字符串的第一个字的拼音首字母(大写),如果字符串第一个字符不是中文,
则返回空格。

        使用范例
        SELECT name FROM table1 where zh_ch(name) = "S";
                (查询table1表中name首字母为S的项,可以查到"孙悟空"等)

zh_py(str):
--------------------------------------------------------------------------
        参数为一个字符串,可以为NULL,但不能为数值。
        返回参数字符串对应的每个字的拼音首字母(大写)组成的字符串,如果原字符不
是中文,相应位置为空格。

        使用范例
        SELECT name FROM table1 where zh_py(name) = "JZM";
         (查询table1表中name的拼音首字母缩写为SWK的项,可以查到"孙悟空"等)

==========================================================================
Copyright 2001 Steven Clear Peng
Steven Clear Peng <newclear@sina.com / newclear@smth.org>
October 12, 2001
==========================================================================


--
      以clear的名义,出来吧,哭蛹!

          哇,整个世界清净了!


※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.168.12]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.175]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店