jdbc - UTF8mb4 unicode 破坏 MariaDB JDBC 驱动程序

标签 jdbc utf-8 coldfusion mariadb utf8mb4

我有一些包含 unicode 字符的产品名称

⚠️📷PLEASE READ! WORKING KODAK DC215 ZOOM 1.0MP DIGITAL CAMERA - UK SELLER

heidiSQL 中的查询显示效果很好

enter image description here

今天早上我从 MySQL 迁移过来,设置了新的 MariaDB,但是当使用 MariaDB JDBC 通过 ColdFusion 查询检索记录时,我得到了

java.lang.StringIndexOutOfBoundsException: begin 0, end 80, length 74
    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3410)
    at java.base/java.lang.String.substring(String.java:1883)
    at org.mariadb.jdbc.internal.com.read.resultset.rowprotocol.TextRowProtocol.getInternalString(TextRowProtocol.java:238)
    at org.mariadb.jdbc.internal.com.read.resultset.SelectResultSet.getString(SelectResultSet.java:948)

productname 字段排序规则是 utf8mb4_unicode_520_ci,我尝试了几个选项。我尝试在表和数据库级别设置它。

ColdFusion 管理中的 JDBC 连接字符串为 jdbc:mysql://localhost:3307/usedlens?useUnicode=true&characterEncoding=UTF-8

我注意到从一开始就使用 MariaDB 的实时生产数据库我没有这个问题,但默认字符集是 latin1,并且数据库的记录相同

????PLEASE READ! WORKING KODAK DC215 ZOOM 1.0MP DIGITAL CAMERA - UK SELLER

最佳答案

以下是我们如何去除高位 ASCII 字符,同时保留任何可以挽救的字符:

string function ASCIINormalize(string inputString=""){
    return createObject( 'java', 'java.text.Normalizer' ).normalize( javacast("string", arguments.inputString) , createObject( 'java', 'java.text.Normalizer$Form' ).valueOf('NFD') ).replaceAll('\p{InCombiningDiacriticalMarks}+','').replaceAll('[^\p{ASCII}]+','');
}

productname = ASCIINormalize(productname);

/*
Comparisons using java UDF versus reReplace regex:

"ABC   Café ’test"  (note: High ASCII non-normal whitespace characters used.)
   ASCIINormalize = "ABC Cafe test"
   reReplace = "ABC Caf test"

"čeština"
   ASCIINormalize = "cestina"
   reReplace = "etina"

"Häuser Bäume Höfe Gärten"
   ASCIINormalize = "Hauser Baume Hofe Garten"
   reReplace = "Huser Bume Hfe Grten"
*/

关于jdbc - UTF8mb4 unicode 破坏 MariaDB JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63233254/

相关文章:

java - 通过 Java 应用程序连接到另一台机器上的数据库

java - java中文件上传如何设置UTF-8?

html - 从输入文本字段中获取正确的 HTML 编码值

java - 如何在 Netbeans 中打开 UTF-8 格式的文件;不扭曲字符?

rest - Coldfusion 10 REST - 500 内部服务器错误

mysql - 我可以使用 ColdFusion 查询 MySQL IN 语句中使用的字符串参数吗?

java - 无法使用 executeQuery() 发出数据操作语句

java - JDBC 对象列表索引越界

java - db2 jdbc 连接错误

php - 智能引号无法正确转换为 UTF8