荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店