今天跟大家聊聊我解决 Superset 中文乱码问题的一些实践经历,希望能帮到遇到同样问题的朋友。
我在 Superset 上面跑一些查询,结果发现只要查询条件里带中文,那日志里直接就给我打一堆问号“???”,查出来的数据压根儿不对,当时就懵。
第一反应是后端处理数据的时候是不是哪里出问题。 于是我就开始各种排查后端代码,看看是不是字符编码没设置对,或者是数据在传输过程中被搞乱。结果搞半天,发现后端没啥问题,数据都是好好的。
后来又试着导出 CSV 文件,这下更惨,导出来的文件用 Excel 打开一看,中文全成乱码,完全没法看。
没办法,只能硬着头皮在网上各种搜资料。
我尝试去改 `superset/*`(或者 `superset_*`,具体看你的版本),想着是不是改一下默认编码就好。
我在配置文件里加上下面这玩意儿:
python
import sys
from urllib import parse
* = open(*(), mode='w', encoding='utf8')
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:yourpassword@127.0.0.1:3306/superset?charset=utf8'
想着强制指定一下数据库连接的字符集,结果重启 Superset 之后,还是不行,中文依旧乱码。
后来我发现,在添加 MySQL 数据库连接的时候,那个 URL 里面也得指定字符集才行。
我就跑到 Superset 的 Database 连接设置里,找到我那个 MySQL 连接,把连接 URL 改成这样:
`mysql+pymysql://user:password@host:port/database?charset=utf8`
加个`?charset=utf8`, 重新连接,你猜怎么着?还是不行!
我发现导出 CSV 乱码这个问题,得改编码方式。
再次打开`superset/*`,找到关于 CSV 导出的配置,把编码改成 `utf-8-sig`。
python
CSV_EXPORT = {
'encoding':'utf_8_sig'
据说这个 `utf-8-sig` 可以在 Excel 里正确显示中文。改完之后,重启 Superset,再导出 CSV,这下终于正常!
解决 Superset 中文乱码问题,真的是一个一个坑去填。先是排查后端,然后改配置文件,改数据库连接 URL,还得改 CSV 导出编码。
希望我的这些经验能帮到大家,少走一些弯路。