应该如何开发一个非程序员可以从json格式中提取数据作为关系数据库的环境?

wecizke3  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(272)

我的问题是存储在mariadb中的json数据被编码为json编码(unicode转义(ascii码)!?。文本的一部分已更改为“\u??”。
因此,在从json数据提取阶段,文本数据应该被编码成utf8。我尝试创建视图表形式的关系数据库,并允许非程序员使用phpmyadmin导出视图,但问题是无法将json编码编码为utf8。下面是sql命令。

select convert(json_extract(json_col, '$.text') using utf8) as text from json_table;

我通过python(v3.8)+sqlalchemy将包含emoji的json数据存储到mariadb(v10.3.21)中。json数据(utf8)通过sqlalchemy json类型隐式编码为json编码。
我想教我。
[我希望]我只能在mariadb/phpmyadmin边上解决这个编码问题,以创建一个视图。
如果json数据列的charcode更改为 latin1 对于exclude unicode转义,字符码将由phpmyadmin或web浏览器软件自动转换为utf8?
我可以通过改变python的代码来对应吗?(没有sqlalchemy?危险?)
相应的内部客户端程序(sequel pro)
其他
我的json表模式。

CREATE TABLE `my_json` (
  `id_` bigint(20) NOT NULL,
  `json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
  PRIMARY KEY (`id_`);
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

炼金术

class MyJson(Base):
        __tablename__ = table_name
        __table_args__ = ({"mysql_engine": "InnoDB"})
        id = Column('id', BIGINT(unsigned=True), primary_key=True, autoincrement=False)
        _json = Column('json', JSON)
engine = create_engine('mysql://%s:%s@%s:%s/%s?charset=utf8mb4'.format(secret), echo=True, convert_unicode=True, connect_args={"charset": 'utf8mb4', "use_unicode": True})
olhwl3o2

olhwl3o21#

谢谢大家。
这个问题解决了。只从mariadb10.3.xx转移到mysql5.7。
在mariadb上,json数据存储为longtext类型utf8mb4\u bin。但是,在mysql上,json数据存储在json类型中。
mariadb表结构不能像mysql一样在相同的过程中更改为json类型。所以我现在把env改成mysql+docker。

相关问题