我已经使用mysqlimport很长一段时间了,现在因为mysql 5.7添加了json数据类型支持,我正在尝试使用包含json数据的行的mysqlimport.
以下是使用mysqlimport导入的csv文件中的一行示例:
column_A_value,column_B_value,[{"x":20,"y":"some name"}]
Run Code Online (Sandbox Code Playgroud)
请注意,最后一列类型是json.现在使用mysqlimport时如下:
mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' some_db /path/to/products.txt
Run Code Online (Sandbox Code Playgroud)
我收到以下错误: Cannot create a JSON value from a string with CHARACTER SET 'binary'., when using table: products
但是使用生成LOAD DATA IN FILE而不是mysqlimport工作没有问题!我打开mysql日志并在运行mysqlimport时检查生成的LOAD DATA IN FILE命令,然后复制并粘贴它,它没有问题!我跑了类似的东西:
LOAD DATA LOCAL INFILE '/path/to/products.txt'
INTO TABLE products
Run Code Online (Sandbox Code Playgroud)
它奏效了!唯一的区别是在日志中,当运行mysqlimport时,也生成了这一行
Query /*!40101 set @@character_set_database=binary */
Run Code Online (Sandbox Code Playgroud)
然后生成了LOAD DATA IN FILE命令,因此该行是问题的根源.
所以无论如何我尝试将字符集设置为utf8,
mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' --default-character-set=utf8 some_db /path/to/products.txt
Run Code Online (Sandbox Code Playgroud)
但是徒劳,发生了同样的错误.
那么任何线索如何解决这个字符集问题呢?
我在 MariaDB 10.4 中的 json 列的单元格中有以下值:
{
"0": [
21,
"Pallet da 1250kg (50 * Sacco da 25kg)",
"1250",
"kg"
],
"1": [
21,
"Sfuso",
"12",
"kg"
],
"2": [
12,
"Sacco da 5kg",
"10",
"kg"
],
"3": [
12,
"Pallet da 2500kg (2 * Pallet da 1250kg (50 * Sacco da 25kg))",
"5000",
"kg"
]
}
Run Code Online (Sandbox Code Playgroud)
键 ( "0", "1", "2", "3") 是自动生成的。
我想计算每个数组的第二个元素与我在条件中传递的元素相同的行数。
现在我有能力做这样的事情:
query = '''SELECT COUNT(*) AS rowcount FROM ordine_al_fornitore WHERE JSON_CONTAINS(fca_ordinati, …Run Code Online (Sandbox Code Playgroud) 我可以使用 JSON 数组作为INMySQL(版本 5.7 及更高版本,因为支持 JSON)的子句参数吗?
下面是我无法完全工作的代码......
DROP TABLE IF EXISTS json_table;
CREATE TEMPORARY TABLE json_table(
id INT,
data JSON
);
INSERT INTO json_table (id, data) VALUES (1, "[1,2,3,4,19,20]");
SELECT jt.id, jt.data, REPLACE(REPLACE(jt.data, '[', ''), ']', ''), jt.data->"$[4]"
FROM json_table jt;
SELECT stuff.name
FROM table_stuff stuff
#JOIN json_table jt ON stuff.id IN (1,2,3,4,19,20);
JOIN json_table jt ON stuff.id IN (REPLACE(REPLACE(jt.data, '[', ''), ']', ''));
DROP TABLE IF EXISTS json_table;
Run Code Online (Sandbox Code Playgroud) 我正在尝试选择列中的roles属性json包含任何值的所有列。
我试过的语句:
SELECT * FROM components WHERE json->'$.roles' IN(1)
SELECT * FROM components WHERE JSON_CONTAINS(components, '1', '$.roles')
1它时,它会像它应该的那样拉两个,因为它们都包含 1,但是如果我插入1,2或者JSON_ARRAY(1,2)它只会拉后面的行,因为它没有检查每个数组元素......我有以下表components 结构和数据:
+====+========================================================================================================================================================================================================+==+
| id | json | |
+====+========================================================================================================================================================================================================+==+
| 1 | {"area": 1, "roles": [1], "elements": [{"home": {"content": "Home", "attributes": {"class": "my_class_1"}}}, {"dashboard": {"content": "Dashboard", "attributes": {"class": "my_class_1"}}}]} | |
+----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--+
| 2 | {"area": 1, "roles": [1, 2, 5], "elements": [{"home": {"content": "Testing", …Run Code Online (Sandbox Code Playgroud) 是否可以通过 mysql 的 json 数组中的值(而不是索引)删除元素?例如:
# ['new', 'orange']
update waitinglist SET new = JSON_REMOVE("orange", '$') WHERE id=2;
# now it will be ['new']
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有更好的方法来存储它,以便我可以根据需要删除元素?此外,数组中永远不会有重复项。
不幸的是,MySQL 不提供类似的功能
SELECT JSON_OBJECT(*) FROM table
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否有人已经编写了执行此任务的函数。我想要实现的是SELECT *从任何返回JSON_OBJECT.
当然,可以为每个给定的表手动创建它。但我正在寻找一种更通用的方法,不需要手动指定所有列。
我在体育场表 (mysql) 中有一个名为 location 的 JSON 字段,我可以将它与下面的另一个 json 进行比较吗?...
select *from stadiums where location = '{"lat":40, "lng":3}';
Run Code Online (Sandbox Code Playgroud)
*查询不会返回任何错误,但当实际上存在巧合时,不会返回任何行
我在MySQL数据库表中使用JSON列类型。当我尝试在表列中保存JSON值时,JSON数组会自动重新排序(随机播放)
我有以下JSON:
{"TIMER_HEADER": [{"XX!TIMERHDR": "XXTIMERHDR", "VER": " 7", "REL": " 0", "COMPANYNAME": "XXX", "IMPORTEDBEFORE": "N", "FROMTIMER": "N", "COMPANYCREATETIME": "12423426"}, {"XX!HDR": "XXHDR", "PROD": "Qics for Wnows", "VER": "Version 6.0", "REL": "Release R", "IIFVER": "1", "DATE": "2018-01-20", "TIME": "1516520267", "ACCNTNT": "N", "ACCNTNTSPLITTIME": "0"}], "COLUMN_HEADER": ["!TIMEACT", "DATE", "JOB", "EMP", "ITEM", "PITEM", "DURATION", "PROJ", "NOTE", "BILLINGSTATUS"]}
Run Code Online (Sandbox Code Playgroud)
保存在MySql表的JSON列中后,将变为:
{"TIMER_HEADER": [{"REL": " 0", "VER": " 7", "FROMTIMER": "N", "COMPANYNAME": "XXX", "XX!TIMERHDR": "XXTIMERHDR", "IMPORTEDBEFORE": "N", "COMPANYCREATETIME": "12423426"}, {"REL": "Release R", "VER": "Version 6.0", "DATE": "2018-01-20", "PROD": "Qics …Run Code Online (Sandbox Code Playgroud) 我正在尝试将新元素推送到MySQL中的JSON数组。
例如 在下表人员中:
id(int) liked_ids(JSON)
1 [2,3]
Run Code Online (Sandbox Code Playgroud)
现在我想将5推入Liked_ids。
我查看了JSON_ARRAY_APPEND,但即使从文档中也找不到一种使用它的方法。
我已经在 Eloquent 中使用 JSON 成功完成了一些查询,但我不知道如何从数组内的对象中查询值,如下所示:
在“属性”栏中,有:
{
"products": [
{
"media": "1",
"code": "4186GSB"
},
{
"media": "2",
"code": "4186GSE"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想查询“media”= 1
到目前为止我已经尝试过:
$query->where('attributes->products->media', 1); // failed
// or
$query->where('attributes->products[*]->media', 1); // failed
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用原始查询,但如果这是解决方案就没关系!
mysql-json ×10
mysql ×9
json ×3
eloquent ×1
laravel ×1
mariadb ×1
mariadb-10.4 ×1
mysql-5.7 ×1
mysqlimport ×1