Skip to content

Commit d5fa9fa

Browse files
authored
Merge pull request #605 from TabooLib/claude/issue-603-20250821-0237
Fix MySQL charset collation conflicts in database operations
2 parents 2eb93b5 + b2e377b commit d5fa9fa

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

module/database/src/main/kotlin/taboolib/module/database/Filterable.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ abstract class Filterable {
7070
return Criteria("${asFormattedColumnName()} IN (${unwrapArray(value, el)})", el).apply(this@Filterable)
7171
}
7272

73+
/**
74+
* 在某集合之内(强制使用二进制校对规则,解决字符集冲突)
75+
* 适用于MySQL utf8_general_ci 校对规则冲突的情况
76+
*/
77+
infix fun String.insideBinary(value: Array<Any>): Criteria {
78+
if (value.isEmpty()) error("empty value")
79+
val el = arrayListOf<Any>()
80+
return Criteria("${asFormattedColumnName()} COLLATE utf8mb4_bin IN (${unwrapArray(value, el)})", el).apply(this@Filterable)
81+
}
82+
7383
/** 在某范围之内 */
7484
infix fun String.between(value: Pair<Any, Any>): Criteria {
7585
val el = arrayListOf<Any>()

module/database/src/main/kotlin/taboolib/module/database/HostSQL.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import taboolib.module.database.Database.settingsFile
1212
class HostSQL(val host: String, val port: String, val user: String, val password: String, val database: String) : Host<SQL>() {
1313

1414
// allowPublicKeyRetrieval=true 用来针对 MySQL8 版本出现的 Public Key Retrieval is not allowed 异常
15-
val flags = arrayListOf("characterEncoding=utf-8", "useSSL=false", "allowPublicKeyRetrieval=true")
15+
// useUnicode=true&connectionCollation=utf8mb4_unicode_ci 解决字符集校对规则冲突
16+
val flags = arrayListOf("characterEncoding=utf-8", "useSSL=false", "allowPublicKeyRetrieval=true", "useUnicode=true", "connectionCollation=utf8mb4_unicode_ci")
1617

1718
val flagsURL: String
1819
get() = if (flags.isEmpty()) "" else "?${flags.joinToString("&")}"

0 commit comments

Comments
 (0)