我花了大约18个小时尝试不同的事情,现在四处寻找,最后我放弃了,不得不问你们。
Backstory:我最终将旧的MS Access数据库迁移到MySQL(版本5.6.16-log)。
问题:Access数据库中的某些Unicode文本包含四个字节(UTF-8)。
MySQL 仍然在插入四个字节的UTF-8字符时出现问题。这个问题已经老了,我很惊讶地发现它还没有修复:http://bugs.mysql.com/bug.php?id=67297
我正在使用“MySQL ODBC 5.3 Unicode Driver”在数据库之间传输数据(最新的beta开发版本)。无论我尝试什么,当我尝试插入具有4字节UTF8字符的字符串时,该过程最终冻结(该线程永远使用100%CPU)。尝试过在互联网上随处可见的所有变通办法,没有任何作用。
现在我将接受MySQL的限制:我无法存储所有Unicode字符。
所以我想在将其插入数据库之前从文本中删除所有4字节UTF8字符。但我不能为我的生活找到一种方法在经典的ASP中做到这一点。
有人可以帮忙吗?
(我不能不使用ASP顺便说一句,有太多的代码用另一种语言重写它。只是改变数据库是一个了不起的壮举;有几个,它需要几天才能完成。)< / p>
编辑:JScript中的解决方案也是可以接受的,因为它可以从ASP页面运行。
答案 0 :(得分:0)
这应该有效:
Function UTF8Filter(strString)
On Error Resume Next
For i = 1 to Len(strString)
charCode = AscW(Mid(strString, i, 1))
If charCode > 32 or charCode <= 127 then
'Append valid character'
strString = Mid(strString, i, 1)
End If
Next
UTF8Filter = strString
On Error Goto 0
End Function
更新功能:
Function Remove4ByteUFT8(strString)
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "/[\xF0-\xF7].../s"
Remove4ByteUFT8 = objRegEx.Replace(strString, "")
End Function