荔园在线

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

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


发信人: baty (新一代懒人), 信区: Database
标  题: MySQL 中文字符串拼音顺序排序模块 (转载)
发信站: 荔园晨风BBS站 (Thu Oct 25 23:06:08 2001), 转信


下载地址:
ftp://ftp.gnuchina.org/incoming/mysql_zh By NewClear/mysql_zh.tar.gz

MySQL 中文字符排序模块 (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.so文件到ld命令寻找的目录中,建议使用"/usr/lib"。
        cp mysql_zh.so /usr/lib
4. 进入MySQL安装UDF。
        CREATE FUNCTION zh_int RETURNS INTEGER SONAME "mysql_zh.so";
        CREATE FUNCTION zh_str RETURNS STRING SONAME "mysql_zh.so";
5. 重新启动MySQL。
        /etc/rc.d/init.d/mysqld restart
                (命令依系统环境可能有所不同)

使用:
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的按拼音顺序排序)

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

--
     来 人
      Welcome to Sunrise!

             我总有一种想为你而死的冲动

                          因为我不知如何才能把你打动

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.242]


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

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