like 检索出错:内存溢出 , 日文片假名

2023-11-03 05:59

本文主要是介绍like 检索出错:内存溢出 , 日文片假名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

26个日文片假名会导致Access搜索( 80040e14 / 内存溢出)
ゴ ガ ギ グ ゲ ザ ジ ズ ヅ デ ド ポ ベ プ ビ パ ヴ ボ ペ ブ ピ バ ヂ ダ ゾ ゼ
解决办法:
当字段内包含了这26个日文字符任意一个多个时,就会导致在执行SQL语句中包含了
[字段] like 
' %aaaaa%' 或 inStr(1,[字段],'aaaaa',1)>0
这样的查询时,毫无道理的出现了
" Microsoft JET Database Engine 错误 '80040e14' 内存溢出 " 的错误
其他Jet SQL函数命令未作测试,大概与字符搜索定位匹配相关的都可能出错
搜索相关资料得知被微软工程师证实是Access的bug,可能是语法关系都是微软的东东
在vbs中 执行inStr(
1 ,日文平假名变量, " aaaaa " , 1 )依然要出现错误
Microsoft VBScript 运行时错误 错误 
' 800a0005' 无效的过程调用或参数: 'instr' 
没有搜索,因这几个字符出现Access的论坛网站搜索无法进行,何等痛苦
昨天一朋友大叫怪事,他的音乐数据库无法搜索了,只有30000条记录时是好的
毫无疑问,日文片假名是祸根,花几分钟把有包含上面的日文替换成
" ? " 搜索顺利恢复
找来论坛程序用户群最大的动网dvBBS AC版本 
7 .0SP2 版测试,同样有这个日文发帖后 导致无法搜索并且运行时出错的问题
线上去搜索 
' 80040e14' 内存溢出" 的错误 多的是!
一简单有效的解决办法:
对这26个字符进行编码和解码,可能效率感觉不理想,测试下来问题不大,速度影响不是太大
编码:
Function  Jencode(byVal iStr)
if   isnull (iStr)  or   isEmpty (iStr)  then
 Jencode
= ""
 
Exit   function
end   if
dim  F,i,E
'  F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
'
             "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
'
             "ヂ","ダ","ゾ","ゼ")
 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 ))
 Jencode
= iStr
 
for  i = 0   to   25
  Jencode
= replace (Jencode,F(i),E(i))
 
next
End Function
解码:
Function  Juncode(byVal iStr)
if   isnull (iStr)  or   isEmpty (iStr)  then
 Juncode
= ""
 
Exit   function
end   if
dim  F,i,E
'  F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
'
             "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
'
             "ヂ","ダ","ゾ","ゼ")
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 ))
 Juncode
= iStr
for  i = 0   to   25
 Juncode
= replace (Juncode,E(i),F(i)) '
next
End Function
注意,如果直接使用字符不方便(windows还没装日文支持),注释掉的部分提供有 
chr ( - 23804 ) ..这样的定义
这样
1 .
表单输入保存时,使用Jencode()将这26个字符先编码再保存(为什么是这26个字符,经过全部测试87个平假名89个片假名最终认定的)

ゴ 即 
chr ( - 23116 ) 编码为 Jn1;
2 .
显示时,则使用 Juncode() 函数进行解码,还原日文片假名显示
3 .
搜索关键字,也要使用 Jencode() 进行编码后再放入 like里
where [Topic] like 
' %Jencode(kewwords)%' 使用
才能保证搜索的值和编码过的数据库字段内容匹配
==================================
PS:
也可以使用正则表达式来改写上面的两个函数,或许效率还要更高些
再就是如果 压根不使用日文,也不需要搜索日文,则解码部分可以不用,保存数据实直接把这26个片假名字符替换为空字符或任一字符,比如
" "
抛砖引玉,如果有更本质的真正的好方法,谢分享
附:
----------------------------
平假名87个 asc值 
- 23391   -->   - 23316
unicode 
3040 - 309F 
ぁあぃいぅうぇえぉお
かがきぎくぐけげこご
さざしじすずせぜそぞ
ただちぢっつづてでと
どなにぬねのはばぱひ
びぴふぶぷへべぺほぼ
ぽまみむめもゃやゅゆ
ょよらりるれろゎわゐ
ゑをん゛゜ゝゞ
------------------------------
片假名89个 asc值 
- 23135   ->   - 23059
unicode 30A0
- 30FF
ァアィイゥウェエォオ
カガキギクグケゲコゴ
サザシジスズセゼソゾ
タダチヂッツヅテデト
ドナニヌネノハバパヒ
ビピフブプヘベペホボ
ポマミムメモャヤュユ
ョヨラリルレロヮワヰ
ヱヲンヴヵヶーヽヾ
---------------------------------------------------------------------

错误情况:
ACCESS数据库含有某些特定日文字符时,like检索可能会出错的几种情况:
========================
conn.open 
" driver={microsoft access driver (*.mdb)};dbq= "   &  DatabaseToQuery
rs.open StrSQL,conn,
1 , 1
出错
========================
错误描述: [Microsoft][ODBC Microsoft Access Driver] 内存溢出
错误编号: 
- 2147467259
错误类型:
Microsoft OLE DB Provider 
for  ODBC Drivers 错误  ' 80004005' 
[Microsoft][ODBC Microsoft Access Driver] 内存溢出 
/ idealtutor / admin / teacherList.asp,行410

连接方式与打开方式
========================
conn.open 
" driver={microsoft access driver (*.mdb)};dbq= "   &  DatabaseToQuery
rs_str.open StrSQL,conn,
1 , 1
出错
========================
错误描述: ODBC 驱动程序不支持所需的属性。
错误编号: 
- 2147217887
错误类型:
Microsoft OLE DB Provider 
for  ODBC Drivers (0x80040E21)
/ syl / access - syl - str.asp, 第  442  行
连接方式与打开方式
========================
conn.open 
" driver={microsoft access driver (*.mdb)};dbq= "   &  DatabaseToQuery
rs_str.open StrSQL,conn,
1 , 3
出错
========================
错误描述: [Microsoft][ODBC Microsoft Access Driver] 内存溢出
错误编号: 
- 2147217913
错误类型:
Microsoft OLE DB Provider 
for  ODBC Drivers (0x80040E07)
连接方式与打开方式
========================
conn.open 
" Provider=Microsoft.Jet.OLEDB.4.0; Data Source= "   &  DatabaseToQuery
rs_str.open StrSQL,conn,
1 , 1
出错
========================
错误描述: 内存溢出
错误编号: 
- 2147217900
错误类型:
Microsoft JET Database Engine (0x80040E14)
连接方式与打开方式
========================
conn.open 
" Provider=Microsoft.Jet.OLEDB.4.0; Data Source= "   &  DatabaseToQuery
rs_str.open StrSQL,conn,
1 , 3
出错
========================
错误描述: 内存溢出
错误编号: 
- 2147217900
错误类型:
Microsoft JET Database Engine (0x80040E14)

这篇关于like 检索出错:内存溢出 , 日文片假名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336067

相关文章

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

PHP内存泄漏问题解析

内存泄漏 内存泄漏指的是在程序运行过程中申请了内存,但是在使用完成后没有及时释放的现象, 对于普通运行时间较短的程序来说可能问题不会那么明显,但是对于长时间运行的程序, 比如Web服务器,后台进程等就比较明显了,随着系统运行占用的内存会持续上升, 可能会因为占用内存过高而崩溃,或被系统杀掉 PHP的内存泄漏 PHP属于高级语言,语言级别并没有内存的概念,在使用过程中完全不需要主动申请或释放内

C++学习笔记----6、内存管理(四)---- 通常的内存陷阱(2)

3、Windows环境下使用Visual C++发现并修复内存渗露         内存渗露很难跟踪是因为你无法很容易地看着内存并且看到什么对象处于使用中,一开始在哪儿分配的内存。然而,是有程序可以为你做到这一点的。内存渗露检测工具有昂贵的专业软件包,也有免费下载的工具。如果你是在Microsoft Visual C++环境下工作,它的排错工具库有内建的对于内存渗露检测的支持。该内存检测默认没有