在MySQL数据库与序列化数组中存储JSON数据有哪些优缺点?
我正在将数据插入数据库中json_encoded.现在我想搜索"功能",但我不能.
MySQL查询:
SELECT `id` , `attribs_json`
FROM `products`
WHERE `attribs_json` REGEXP '"1":{"value":[^"3"$]'
Run Code Online (Sandbox Code Playgroud)
这个查询显示了所有带有键"1"的行,而值是任何不值为"3"的东西
我的数据是:
{"feature":{"1":{"value":"["2","3"]"},
"2":{"value":["1"]},
"5":{"value":""},
"3":{"value":["1"]},
"9":{"value":""},
"4":{"value":"\u0633\u0627\u062a\u0646"},
"6":{"value":""},
"7":{"value":""},
"8":{"value":""}
},
"show_counter":"0",
"show_counter_discount":""
}}
Run Code Online (Sandbox Code Playgroud) 我打算json_encoded在我的数据库上存储一个字符串.我不能准确地说出它的长度,但我很确定它会很长.我担心的是哪种场类型,我要使用这个,是不是blob还是text?
我更喜欢能够在快速搜索中尽可能节省空间的那个,在任何情况下我都有其他列我应该索引.
我在其中导出了包含JSON列的数据库.迁移到新服务器后,我的导入每次都崩溃,出现如下错误:
无法从CHARACTER SET'binary'的字符串创建JSON值
在stackoverflow上,我找到了这篇文章,但对我来说不起作用: mysqlimport发出"set @@ character_set_database = binary",这会阻止加载json值
该文件为2GB,无法打开该文件.
任何人都有想法导入我的数据库文件?
我最近开始使用MySQL 5.7.10,我很喜欢原生的JSON数据类型.
但是在更新JSON类型值时遇到了问题.
问题:
下面是表格格式,这里我想在表格的JSON data列中再添加1个键t1.现在我必须获取值修改它并更新表.所以它涉及一个额外的SELECT声明.
我可以像这样插入
INSERT INTO t1 values ('{"key2":"value2"}', 1);
mysql> select * from t1;
+--------------------+------+
| data | id |
+--------------------+------+
| {"key1": "value1"} | 1 |
| {"key2": "value2"} | 2 |
| {"key2": "value2"} | 1 |
+--------------------+------+
3 rows in set (0.00 sec)
mysql>Show create table t1;
+-------+-------------------------------------------------------------
-------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`data` json DEFAULT NULL,
`id` …Run Code Online (Sandbox Code Playgroud) 假设我在一些MySQL表中有一个名为data的JSON列,这个列是一个单独的数组.因此,例如,数据可能包含:
[1,2,3,4,5]
现在我想选择所有具有数据列的行,其中一个数组元素大于2.这可能吗?
我尝试了以下内容,但无论数组中的值如何,似乎总是如此:
SELECT * from my_table
WHERE JSON_EXTRACT(data, '$[*]') > 2;
Run Code Online (Sandbox Code Playgroud) 我有一个带有follow数组的json列:
[
{
"id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
"key": "id",
"type": "input",
},
{
"id": "e0ca5aa1-359f-4460-80ad-70445be49644",
"key": "name",
"type": "textarea",
}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询来获取24276e4b-de81-4c2c-84e7-eed9c3582a31文档列中具有id的行,但它不返回结果:
select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做正确的查询?
我有一个authors带有列的MySQL表id,name和published_books.在这里,published_books是一个JSON列.有样本数据,
id | name | published_books
-----------------------------------------------------------------------
1 | Tina | {
| | "17e9bf8f": {
| | "name": "Book 1",
| | "tags": [
| | "self Help",
| | "Social"
| | ],
| | "language": "English",
| | "release_date": "2017-05-01"
| | },
| | "8e8b2470": {
| | "name": "Book 2",
| | "tags": [
| | "Inspirational"
| | ],
| | "language": "English",
| …Run Code Online (Sandbox Code Playgroud) 我在mysql 5.7上尝试新的json数据类型.当我使用本机php mysql查询时,它工作正常,但当我使用PDO查询数据时,它显示此错误:
错误:异常'PDOException',消息'SQLSTATE [HY000]:/some_folder/pdo.php:12中的常规错误:2036'堆栈跟踪:#0 /some_folder/pdo.php(12):PDO-> query('select*来自table_has_json_datatype')#1 {main}
你们知道如何解决这个问题吗?
谢谢.
使用我的简单测试代码更新:
<?php
try{
$db = new PDO('mysql:host=some.host;dbname=somedb;charset=utf8', 'user', 'pwd');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $e){
echo "Error1: ".$e;
}
try{
$query = $db->query("select * from table_with_json_type");
}catch(PDOException $e){
echo "Error2: ".$e;
}
?>
Run Code Online (Sandbox Code Playgroud) 我正在使用 MySQL 8.0.21。我需要编写一个适用于 JSON 列类型的查询。JSON 文档中的一些数据具有空值,我想过滤掉这些空值。
可能的行示例,为简单起见,已删除 JSON 文档中的大多数属性:
jsonColumn
'{"value":96.0}'
'{"value":null}' -- This is the row I am trying to filter out
NULL
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
-- Removed columns where jsonColumn was NULL but, NOT columns where jsonColumn->'$.value' was null.
SELECT *
FROM <table>
WHERE jsonColumn->'$.value' IS NOT NULL;
-- Note the unquote syntax, ->>. The code above uses ->.
-- Produced the same result as the code above.
SELECT *
FROM <table>
WHERE jsonColumn->>'$.value' IS NOT NULL;
-- Produced same …Run Code Online (Sandbox Code Playgroud)