Navicat连SQLite出现中文乱码怎么办_字符集编码调整

1次阅读

根本原因是navicat默认UTF-8解码与sqlite文件实际编码(如GBK)不匹配;需在连接高级设置中手动指定Character set为UTF-8,且确保数据库内容本身为UTF-8编码。

Navicat 读 sqlite 数据库显示中文为问号或方块

根本原因不是 sqlite 自身不支持中文,而是 navicat 默认用 utf-8 解码时,误判了数据库文件的实际编码(比如建库时用的是系统默认编码如 gbk),或者 sqlite 的 pragma encoding 设置与实际不符。

  • SQLite 数据库文件本身没有强制的“字符集声明”,它的编码取决于创建时连接的编码和写入方式
  • Navicat 连接 SQLite 时不会自动探测编码,它依赖你手动指定或沿用上次设置
  • 如果数据库是用 Python 的 sqlite3、DB Browser for SQLite 或旧版工具创建的,很可能没显式设 UTF-8,导致 Navicat 按错误编码解析字节流

在 Navicat 中手动指定连接编码为 UTF-8

这不是改数据库,而是告诉 Navicat:“请用 UTF-8 去解读这个文件里的字节”。只要数据本身确实是 UTF-8 编码存进去的(绝大多数现代工具默认如此),这步就能立刻见效。

  • 右键已保存的 SQLite 连接 → 编辑连接
  • 切换到 高级 页签
  • 找到 Character set 下拉框,选 UTF-8(不是 auto,也不是 GBK
  • 点确定,重新连接 → 中文应该正常显示了

注意:Character set 这个设置只影响 Navicat 如何解码从 SQLite 返回的文本字段,不影响数据库文件结构或存储格式。

确认 SQLite 数据库实际是否为 UTF-8 编码

如果设了 UTF-8 还是乱码,说明数据可能真不是 UTF-8 存的。这时候不能硬调 Navicat,得查源头。

  • 用命令行打开数据库:sqlite3 your.db
  • 执行:PRAGMA encoding; —— 它返回的是 SQLite 内部记录的编码标识,比如 "UTF-8""UTF-16le",但这个值只是建议性标记,不强制校验
  • 更可靠的方法:用十六进制查看器打开 .db 文件,找一条含中文的记录对应位置,看字节是否符合 UTF-8 编码规则(例如中文通常为 3 字节,以 E4E9 开头)
  • 如果确认是 GBK 编码存的(比如字节像 C4 E3),那必须用 GBK 工具重导一次,Navicat 设 GBK 才能显示,但后续写入会出问题 —— 强烈建议统一转成 UTF-8

Python 或其他程序写入时没设编码,导致 Navicat 读不出来

常见于用 sqlite3 模块直接 execute("INSERT INTO t VALUES ('中文')") 却没处理连接编码。Python 3 默认字符串是 Unicode,但底层写入 SQLite 时仍依赖连接的编码配置。

  • Python 中应显式设置连接编码:conn = sqlite3.connect("test.db"); conn.execute("PRAGMA encoding = 'UTF-8'")
  • 更稳妥的做法:在建库后立即执行 PRAGMA encoding = "UTF-8",并确保所有文本都以 Python str(非 bytes)传入
  • 避免用 open().read() 读 SQL 文件再执行,除非明确用 encoding="utf-8" 打开,否则文件本身的编码可能污染内容

Navicat 的编码设置只是最后一道解析关卡,前面任意一环用了非 UTF-8,它就无能为力。

text=ZqhQzanResources