我的问题是存储在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})
1条答案
按热度按时间olhwl3o21#
谢谢大家。
这个问题解决了。只从mariadb10.3.xx转移到mysql5.7。
在mariadb上,json数据存储为longtext类型utf8mb4\u bin。但是,在mysql上,json数据存储在json类型中。
mariadb表结构不能像mysql一样在相同的过程中更改为json类型。所以我现在把env改成mysql+docker。