【发布时间】:2020-11-23 17:53:23
【问题描述】:
我有一些包含 unicode 字符的产品名称
⚠️????请阅读!可工作的柯达 DC215 变焦 1.0MP 数码相机 - 英国 卖家
heidiSQL 中的查询显示它很好
我今天早上从 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,并且与数据库相同的记录是
????请阅读!可使用的柯达 DC215 变焦 1.0MP 数码相机 - 英国卖家
【问题讨论】:
-
是否正好有 4 个问号?我希望这 2 个表情符号有 10 个:十六进制:
E29AA0 EFB88F F09F93B7 -
@RickJames 我照原样复制了文本,所以是的 4 ????,它与在 prod 上作为 dev 导入的产品相同。顺便说一句,如果我在我的数据库处理它们之前没有说清楚,请参阅添加的屏幕截图,这只是 Coldfusion 使用的 jdbc 引发了错误。
-
我没用过MariaDB,但你不应该指定
characterEncoding=utf8mb4吗? -
仅供参考:我将 CF2016 与 Microsoft JDBC SQL 驱动程序一起使用,并且 NVARCHAR 字段和表情符号已正确存储(使用默认拉丁排序规则)。我们还在同一列中支持多种外语,并且没有任何查询问题。我想知道这是否是一个严格的 JDBC 问题。
标签: jdbc utf-8 coldfusion mariadb utf8mb4