提问人:DenisZ 提问时间:3/12/2023 更新时间:3/12/2023 访问量:170
如何正确地将 NULL 值从 Bash 脚本分配给 MySQL
How to properly assign NULL value from Bash script to MySQL
问:
我有一个需要更新 MySQL DB 的 bash 脚本。我有一个语句来确定要放入 db 的内容,但我认为我将 NULL 值与 NULL 字符串混淆。我的代码如下:if
db_host="localhost"
db_user="user"
db_pass="pass"
db_name="dbname"
MyCmd="mysql -N -h $db_host -u $db_user -p$db_pass -D $db_name"
if [[ $LastCh > 1516980000 ]]; then
NewCh="$(date -d @$LastCh +"%Y-%m-%d %H:%M:%S")"
elif [ -n "$NewCh" ]; then
NewCh=$($MyCmd -e "SELECT MAX(LastChange) FROM Status WHERE IDN=$idn AND LastChange>0")
# NewCh=$($MyCmd -e "SELECT MAX(LastChange) FROM Status WHERE IDN=$idn AND LastChange IS NOT NULL")
else
NewCh=NULL
fi
StatSQL="IDN, Name, LastIP, Activesince, LastChange"
$MyCmd -e "INSERT INTO Status ($StatSQL) VALUES ('$idn', '$name', '$ip', '$activesince', '$NewCh')"
因此,如果我在脚本中得到它,我会将最后的更改分配给数据库,但如果没有,它需要从 IDN 字段的 imum 值中获取值,但如果至少有一个是 ,它会向我显示值。我怀疑它必须与我在某些情况下分配的实际字符串“NULL”并且我的子句不起作用时有关,所以我添加了额外的条件,该条件也不起作用(),但它与 一起使用,但也不是每种情况。
1.) 如何修改我的 NewCh 变量以能够携带 NULL 值?或者如何检查数据库中的字段是什么以及什么是“NULL”(字符串)MAX
NULL
MAX
NULL
NULL
WHERE
.. AND LastChange IS NOT NULL
LastChange>0
NULL
答:
1赞
ysth
3/12/2023
#1
Shell 变量没有特殊的 null 值。将它们设置为您始终希望作为 null 插入的特定字符串(可以是字符串 NULL 或空字符串或其他内容),并在插入中对其进行测试:
insert into tbl (col1,col2) values (nullif('$col1','specialnullvalue'),...
评论
1赞
DenisZ
3/12/2023
谢谢@ysth。我想我得到了你,所以我可以做并将我分配 NULL 值。添加到字段中,如果没有数学,则将是变量的值$NewCh 。NULLIF('$NewCh', 'NULL')
评论
#!/bin/bash
$NewCh
NewCh="'$(date ...)'"
NewCh="'$($MyCmd ..)'"
NewCh=NULL
INSERT
INSERT ... ( ...., '$activesince', $NewCh)"
$(data ...
date
typeset -p NewCh
declare -- NewCh="'2023-03-12 13:10:24'"