mysql - 如何使用bash运行带有 `ENCRYPT()`的mysql脚本?

标签 mysql bash

我的 bash 脚本如下:

#!/bin/bash
db_root_user='root'
db_root_password='rootpassword'
mail_db='mail'
mysql --user="$db_root_user" --password="$db_root_password" << EOF
CREATE DATABASE $mail_db;
USE $mail_db;
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE users (staff_id SMALLINT unsigned NOT NULL,email_addr varchar(100) NOT NULL, password varchar(106) NOT NULL, PRIMARY KEY (email_addr)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO domains (domain) VALUES ('myd1.com'),('myd2.com'),('myd3.com');
INSERT INTO users (staff_id,email_addr, password) VALUES ('1','admin@myd1.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd2.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd3.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
EOF

但是我得到了如下错误:
第 6 行出现错误 1048 (23000):“密码”列不能为空

实际上,password 列是 ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

有什么问题吗?
提前致谢!

最佳答案

我试过了

mysql -e "select ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))"

偶尔会得到*0

解决方案:转义美元符号:

mysql -e "select ENCRYPT('mypassword',CONCAT('\$6\$', SUBSTRING(SHA(RAND()), -16)))"

这也适用于此处的文档。

关于mysql - 如何使用bash运行带有 `ENCRYPT()`的mysql脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55073307/

相关文章:

php - 如何执行这种类型的 MySQL 查询 - 基于 3 个表选择数据?

bash - netbeans 是否支持 .sh (bash) 脚本的着色?

linux - 嵌入式linux中的脚本

ios - 如何将 xcode 的默认 shell 更改为 bash

mysql - 如何将命令输出附加到 MariaDB 数据库?

linux - 没有 curl 或 wget 的 HTTP 请求(Ubuntu Core Bash)

php - 如何保护 HTML 导航

mysql - 我的 Mysql LIKE 语句应该多快?

mysql - 我可以在MySql中使用函数作为默认值吗?

php - 订单插入,同一个订单中的多个项目