用like查询带有日文片假名报“内存溢出”的解决办法
2010-05-13 09:56
295 查看
小知识:什么是日文片假名?
日语的写法有假名和汉字两种。
就像中国的汉字和拼音一样,你写汉字能够看懂,写拼音就更能知道了
而假名又分两种 片假名和平假名。
如这样写的是:あ、い、う、え、お 平假名。
这样写的是:ア、イ、ウ、ェ,ォ 片假名。
他们都是表示同一个,只是写法不一样而已。
一、替换法:把数据存储到数据库前把26个日文片假名替换成其他编码,从数据库读取出来后再反替换回来。函数示例如下:
编码方式,用于把表单数据存储到数据库之前:JPcode(iStr,true)
解码方式,用于从数据库读取出来之后的显示:JPcode(iStr,false)
函数:
Function JPcode(byVal iStr,codeType)
If isNull(iStr) or isEmpty(iStr) or iStr = "" Then
JPcode = "" : Exit function
End If
Dim F,i,E
E = array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;",_
"Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;",_
"Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;",_
"Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F = array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
If codyType Then
For i=0 to 25 iStr = Replace(iStr,F(i),E(i)) Next
Else
For i=0 to 25 iStr = Replace(iStr,E(i),F(i)) Next
End If
JPcode = iStr
End Function
注意:使用关键字进行搜索时,也要使用JPcode(iStr,true)进行编码后再放入like语句里使用
例如:where [Topic] like '%" & JPcode(keyword) & "%'
才能保证搜索的值和编码过的数据库字段内容匹配。
二、不要使用like语句,例:
把会报错的SQL:where title like '%keyword%'
换成:where InStr(1,LCase(Title),LCase('keyword'),0)<>0
日语的写法有假名和汉字两种。
就像中国的汉字和拼音一样,你写汉字能够看懂,写拼音就更能知道了
而假名又分两种 片假名和平假名。
如这样写的是:あ、い、う、え、お 平假名。
这样写的是:ア、イ、ウ、ェ,ォ 片假名。
他们都是表示同一个,只是写法不一样而已。
一、替换法:把数据存储到数据库前把26个日文片假名替换成其他编码,从数据库读取出来后再反替换回来。函数示例如下:
编码方式,用于把表单数据存储到数据库之前:JPcode(iStr,true)
解码方式,用于从数据库读取出来之后的显示:JPcode(iStr,false)
函数:
Function JPcode(byVal iStr,codeType)
If isNull(iStr) or isEmpty(iStr) or iStr = "" Then
JPcode = "" : Exit function
End If
Dim F,i,E
E = array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;",_
"Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;",_
"Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;",_
"Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F = array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
If codyType Then
For i=0 to 25 iStr = Replace(iStr,F(i),E(i)) Next
Else
For i=0 to 25 iStr = Replace(iStr,E(i),F(i)) Next
End If
JPcode = iStr
End Function
注意:使用关键字进行搜索时,也要使用JPcode(iStr,true)进行编码后再放入like语句里使用
例如:where [Topic] like '%" & JPcode(keyword) & "%'
才能保证搜索的值和编码过的数据库字段内容匹配。
二、不要使用like语句,例:
把会报错的SQL:where title like '%keyword%'
换成:where InStr(1,LCase(Title),LCase('keyword'),0)<>0
相关文章推荐
- 用like查询带有日文片假名报“内存溢出”的解决办法
- Mysql数据库like模糊查询中文字段不准确的临时解决办法
- Mysql数据库like模糊查询中文字段不准确的临时解决办法
- Mysql 中 like 查询存在反斜杠的解决办法
- ACESS 中使用like查询日文内容时内存溢出的解决方法
- mysql预编译模糊查询(like)中?的冲突,出错的解决办法。
- ACCESS模糊查询出现"内存溢出"原因是日文片假名
- android之Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
- 100万多条数据查询到datatable中,提示内存溢出(解决办法)
- 26个日文片假名导致Access搜索(80040e14/内存溢出)的解决办法
- 解决查询access数据库含日文出现“内存溢出”问题
- Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
- Like模糊查询与带有关键字Reverse的索引应用学习
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法
- MySQL的in查询效率太低的解决办法之一与其它优化示例
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式的解决办法
- Tomcat内存溢出的三种情况及解决办法分析
- windows bat文件中的变量带有小括号的问题及解决办法
- 【Oracle】想查询相关的v$视图,但是提示表或视图不存在解决办法
- PreparedStatement 查询大容量数据内存溢出解决