我有一个products表,其中我将产品图像路径存储为JSON字符串(MariaDB中的LONGTEXT类型),但是,当我使用Node.js查询数据库以获得产品列表并将数据发送到客户端时,它将图像路径作为字符串而不是数组对象接收。问:有没有一种方法可以告诉MySQL/MariaDB将LONGTEXT字段作为JSON返回,或者我需要在Node.js中创建一个帮助函数来完成这项工作?
ilmyapht1#
你可以尝试使用一个transform()JSON
CONVERT( your_long_text_col, JSON)
字符串测试
select concat('"', CONVERT( '{"id": 1, "name": "Monty"}', JSON), '"');
型
dl5txlt92#
如果您需要从Mysql 5.7 JSON**(json类型)迁移到MariaDB 10.6 JSON(文本类型),可以使用自定义JSONTextField代替模型。JSONField**它不需要任何数据迁移,可以在没有任何数据库更改的情况下使用,并且适用于mysql和mariadb
from django.db.models import JSONFieldfrom django.db.models.fields.json import DataContains, JSONExactclass JSONTextField(JSONField): def db_type(self, connection): return "text"class JSONTextExact(JSONExact): def process_lhs(self, compiler, connection, lhs=None): lhs, lhs_params = super().process_lhs(compiler, connection, lhs=lhs) lhs = "JSON_EXTRACT(%s, '$')" % lhs return lhs, lhs_paramsJSONTextField.register_lookup(JSONTextExact)JSONTextField.register_lookup(DataContains)
from django.db.models import JSONField
from django.db.models.fields.json import DataContains, JSONExact
class JSONTextField(JSONField):
def db_type(self, connection):
return "text"
class JSONTextExact(JSONExact):
def process_lhs(self, compiler, connection, lhs=None):
lhs, lhs_params = super().process_lhs(compiler, connection, lhs=lhs)
lhs = "JSON_EXTRACT(%s, '$')" % lhs
return lhs, lhs_params
JSONTextField.register_lookup(JSONTextExact)
JSONTextField.register_lookup(DataContains)
字符串
2条答案
按热度按时间ilmyapht1#
你可以尝试使用一个transform()JSON
字符串
测试
型
dl5txlt92#
如果您需要从Mysql 5.7 JSON**(json类型)迁移到MariaDB 10.6 JSON(文本类型),可以使用自定义JSONTextField代替模型。JSONField**
它不需要任何数据迁移,可以在没有任何数据库更改的情况下使用,并且适用于mysql和mariadb
字符串