fix(firebird): add configurable connection charset

This commit is contained in:
zipg
2026-10-04 03:02:57 +08:00
committed by GitHub
parent 2edd41710d
commit 5887722a49
17 changed files with 59 additions and 1 deletions
@@ -3937,6 +3937,20 @@ const postgresClientKeyPath = computed({
form.value.url_params = setUrlParam(form.value.url_params, "sslkey", value);
},
});
// Firebird 的 Java 驱动(Jaybird)默认按 JVM 编码(UTF-8)解码 CHARACTER SET NONE
// 字段,历史数据若以 GBK 等编码存放就会显示为乱码。这里把连接字符集映射到 JDBC URL 的
// charSet 参数(复用通用 URL 参数通道),交给用户按数据实际编码选择。
const FIREBIRD_CHARSET_OPTIONS = ["UTF8", "GBK", "GB18030", "BIG5", "ISO8859_1", "Cp1252"];
const firebirdCharsetItems = computed(() => {
const current = getUrlParam(form.value.url_params, "charSet");
return current && !FIREBIRD_CHARSET_OPTIONS.includes(current) ? [current, ...FIREBIRD_CHARSET_OPTIONS] : FIREBIRD_CHARSET_OPTIONS;
});
const firebirdCharset = computed({
get: () => getUrlParam(form.value.url_params, "charSet") || "default",
set: (value: string) => {
form.value.url_params = setUrlParam(form.value.url_params, "charSet", value === "default" ? "" : value);
},
});
const redisTlsInsecure = computed({
get: () => getUrlParam(form.value.url_params, "insecure").toLowerCase() === "true",
set: (value: boolean) => {
@@ -9349,6 +9363,24 @@ function openExternalUrl(url: string) {
</label>
</div>
<div v-if="form.db_type === 'firebird'" class="grid grid-cols-4 items-start gap-4">
<Label :class="connectionLabelTopClass">{{ t("connection.firebirdCharset") }}</Label>
<div class="col-span-3 space-y-1.5">
<Select v-model="firebirdCharset">
<SelectTrigger class="h-9">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="default">{{ t("common.default") }}</SelectItem>
<SelectItem v-for="charset in firebirdCharsetItems" :key="charset" :value="charset">{{ charset }}</SelectItem>
</SelectContent>
</Select>
<p class="text-xs leading-5 text-muted-foreground">
{{ t("connection.firebirdCharsetHint") }}
</p>
</div>
</div>
<div v-if="supportsGenericUrlParams" class="connection-url-params-row grid grid-cols-4 items-start gap-4" :class="{ 'connection-url-params-row--compact': !showGenericUrlParamsHint, 'connection-url-params-row--with-hint': showGenericUrlParamsHint }">
<Label :class="[connectionLabelClass, 'connection-url-params-label']">{{ t("connection.urlParams") }}</Label>
<div class="col-span-3 space-y-1.5">
@@ -9375,7 +9407,9 @@ function openExternalUrl(url: string) {
? 'localdatacenter=dc1'
: form.db_type === 'transwarp'
? 'fetchSize=500;auth=noSasl'
: 'sslmode=prefer'
: form.db_type === 'firebird'
? 'charSet=GBK'
: 'sslmode=prefer'
"
/>
<p v-if="showGenericUrlParamsHint" class="text-xs leading-5 text-muted-foreground">
+2
View File
@@ -733,6 +733,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Sertifikat yoxlamasını ötür",
redisTlsInsecureHint: "Öz imzalı sertifikatlar və ya özəl CA-lar üçün redis-cli --tls --insecure əmrinə bərabərdir.",
mysqlTlsMode: "TLS rejimi",
firebirdCharset: "Simvol dəsti",
firebirdCharsetHint: "CHARACTER SET NONE sütunlarında saxlanan mətni (məsələn, GBK ilə saxlanmış köhnə Çin məlumatları) deşifrə edir. Mətn pozulmuş görünürsə, məlumatın faktiki kodlaşdırmasını seçin.",
mysqlTlsModePreferred: "Üstün tutulan",
mysqlTlsModeDisabled: "Deaktiv",
mysqlTlsModeRequired: "Tələb olunur",
+2
View File
@@ -1020,6 +1020,8 @@ export default {
redisTlsInsecure: "Skip certificate verification",
redisTlsInsecureHint: "Equivalent to redis-cli --tls --insecure, for self-signed certificates or private CAs.",
mysqlTlsMode: "TLS Mode",
firebirdCharset: "Charset",
firebirdCharsetHint: "Decodes text stored in CHARACTER SET NONE columns (for example legacy Chinese data saved as GBK). Pick the actual data encoding when text appears garbled.",
mysqlTlsModePreferred: "Preferred",
mysqlTlsModeDisabled: "Disabled",
mysqlTlsModeRequired: "Required",
+2
View File
@@ -992,6 +992,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Omitir verificación del certificado",
redisTlsInsecureHint: "Equivale a redis-cli --tls --insecure, para certificados autofirmados o CA privadas.",
mysqlTlsMode: "Modo TLS",
firebirdCharset: "Juego de caracteres",
firebirdCharsetHint: "Decodifica el texto almacenado en columnas CHARACTER SET NONE (por ejemplo, datos chinos antiguos guardados como GBK). Elige la codificación real de los datos cuando el texto aparezca mal.",
mysqlTlsModePreferred: "Preferido",
mysqlTlsModeDisabled: "Deshabilitado",
mysqlTlsModeRequired: "Requerido",
+2
View File
@@ -958,6 +958,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Lewati verifikasi sertifikat",
redisTlsInsecureHint: "Setara dengan redis-cli --tls --insecure, untuk sertifikat self-signed atau CA privat.",
mysqlTlsMode: "Mode TLS",
firebirdCharset: "Charset",
firebirdCharsetHint: "Mendekode teks yang disimpan di kolom CHARACTER SET NONE (misalnya data bahasa Mandarin lama yang disimpan sebagai GBK). Pilih pengodean data yang sebenarnya saat teks tampak rusak.",
mysqlTlsModePreferred: "Preferred",
mysqlTlsModeDisabled: "Dinonaktifkan",
mysqlTlsModeRequired: "Wajib",
+2
View File
@@ -915,6 +915,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Salta verifica certificato",
redisTlsInsecureHint: "Equivalente a redis-cli --tls --insecure, per certificati auto-firmati o CA private.",
mysqlTlsMode: "Modalità TLS",
firebirdCharset: "Set di caratteri",
firebirdCharsetHint: "Decodifica il testo memorizzato nelle colonne CHARACTER SET NONE (ad esempio dati cinesi legacy salvati come GBK). Scegli la codifica effettiva dei dati quando il testo appare illeggibile.",
mysqlTlsModePreferred: "Preferita",
mysqlTlsModeDisabled: "Disabilitata",
mysqlTlsModeRequired: "Richiesta",
+2
View File
@@ -915,6 +915,8 @@ export default withEnglishFallback({
redisTlsInsecure: "証明書の検証をスキップ",
redisTlsInsecureHint: "自己署名証明書やプライベートCA用の、redis-cli --tls --insecure 相当の設定です。",
mysqlTlsMode: "TLSモード",
firebirdCharset: "文字セット",
firebirdCharsetHint: "CHARACTER SET NONE の列に格納されたテキスト(例: GBK で保存された中国語の旧データ)をデコードします。文字化けする場合はデータの実際のエンコーディングを選択してください。",
mysqlTlsModePreferred: "優先",
mysqlTlsModeDisabled: "無効",
mysqlTlsModeRequired: "必須",
+2
View File
@@ -950,6 +950,8 @@ export default withEnglishFallback({
redisTlsInsecure: "인증서 검증 건너뛰기",
redisTlsInsecureHint: "redis-cli --tls --insecure과 동일하며, 자체 서명 인증서나 사설 CA용입니다.",
mysqlTlsMode: "TLS 모드",
firebirdCharset: "문자 집합",
firebirdCharsetHint: "CHARACTER SET NONE 열에 저장된 텍스트(예: GBK로 저장된 예전 중국어 데이터)를 디코딩합니다. 텍스트가 깨져 보이면 데이터의 실제 인코딩을 선택하세요.",
mysqlTlsModePreferred: "선호",
mysqlTlsModeDisabled: "비활성화",
mysqlTlsModeRequired: "필수",
+2
View File
@@ -916,6 +916,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Ignorar verificação de certificado",
redisTlsInsecureHint: "Equivalente a redis-cli --tls --insecure, para certificados autoassinados ou CAs privadas.",
mysqlTlsMode: "Modo TLS",
firebirdCharset: "Conjunto de caracteres",
firebirdCharsetHint: "Decodifica textos armazenados em colunas CHARACTER SET NONE (por exemplo, dados em chinês antigos salvos como GBK). Escolha a codificação real dos dados quando o texto aparecer corrompido.",
mysqlTlsModePreferred: "Preferencial",
mysqlTlsModeDisabled: "Desabilitado",
mysqlTlsModeRequired: "Obrigatório",
+2
View File
@@ -931,6 +931,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Пропускать проверку сертификата",
redisTlsInsecureHint: "Эквивалентно redis-cli --tls --insecure, для самоподписанных сертификатов или частных CA.",
mysqlTlsMode: "Режим TLS",
firebirdCharset: "Кодировка",
firebirdCharsetHint: "Декодирует текст в столбцах CHARACTER SET NONE (например, старые китайские данные в кодировке GBK). Если текст отображается некорректно, выберите фактическую кодировку данных.",
mysqlTlsModePreferred: "Предпочтительный",
mysqlTlsModeDisabled: "Отключено",
mysqlTlsModeRequired: "Обязательный",
+2
View File
@@ -733,6 +733,8 @@ export default withEnglishFallback({
redisTlsInsecure: "Sertifika doğrulamasını atla",
redisTlsInsecureHint: "redis-cli --tls --insecure ile eşdeğerdir; kendinden imzalı sertifikalar veya özel CA'lar içindir.",
mysqlTlsMode: "TLS Modu",
firebirdCharset: "Karakter kümesi",
firebirdCharsetHint: "CHARACTER SET NONE sütunlarında saklanan metni çözer (örneğin GBK olarak kaydedilmiş eski Çince veriler). Metin bozuk göründüğünde verinin gerçek kodlamasını seçin.",
mysqlTlsModePreferred: "Tercih edilen",
mysqlTlsModeDisabled: "Devre dışı",
mysqlTlsModeRequired: "Zorunlu",
+2
View File
@@ -956,6 +956,8 @@ export default withEnglishFallback({
redisTlsInsecure: "跳过证书验证",
redisTlsInsecureHint: "等价于 redis-cli --tls --insecure,适用于自签名证书或私有 CA。",
mysqlTlsMode: "TLS 模式",
firebirdCharset: "连接字符集",
firebirdCharsetHint: "用于解码 CHARACTER SET NONE 字段中的文本(例如旧库以 GBK 存放的中文)。文本出现乱码时,请按数据的实际编码选择。",
mysqlTlsModePreferred: "优先使用",
mysqlTlsModeDisabled: "禁用",
mysqlTlsModeRequired: "必须使用",
+2
View File
@@ -920,6 +920,8 @@ export default withEnglishFallback({
redisTlsInsecure: "跳過憑證驗證",
redisTlsInsecureHint: "等價於 redis-cli --tls --insecure,適用於自簽名憑證或私有 CA。",
mysqlTlsMode: "TLS 模式",
firebirdCharset: "連線字元集",
firebirdCharsetHint: "用於解碼 CHARACTER SET NONE 欄位中的文字(例如舊資料庫以 GBK 儲存的中文)。文字出現亂碼時,請依資料的實際編碼選擇。",
mysqlTlsModePreferred: "優先使用",
mysqlTlsModeDisabled: "停用",
mysqlTlsModeRequired: "必須使用",
Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB