从 table 中选择 UUID 为 binary() 的数据
Selecting data from table with UUID as binary()
我有一个 AWS RDS Aurora MySQL 连接。以下是我要执行的操作创建、插入和获取数据的步骤:
创建table:
CREATE TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
);
插入table:
INSERT INTO user VALUES (
UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-","")),
"Jon",
"Smith"
);
从table获取:
SELECT * FROM user WHERE user_id = UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-",""));
触发我的函数获取数据的处理函数如下:
module.exports.fetchUser = async (event, context, callback) => {
const params = {
resourceArn: 'arn:aws:rds:*********:cluster:************',
secretArn: 'arn:aws:secretsmanager:*************',
sql: 'SELECT * FROM user WHERE user_id = UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-",""))',
database: 'dev_db1',
continueAfterTimeout: true,
includeResultMetadata: true
}
try {
const db_res = await rdsDataService.executeStatement(params).promise();
const response = {
body: {
message: 'Data fetched',
data: JSON.stringify(db_res, null, 2)
}
};
callback(null, response);
} catch (error) {
callback(null, error)
}
};
为相同的结果执行 http 数据 API 端点:
{
"body": {
"message": "Data fetched",
"data": [
[
{
"blobValue": {
"type": "Buffer",
"data": [
202,
136,
22,
206,
45,
214,
75,
233,
156,
28,
163,
223,
186,
115,
89,
107
]
}
},
{
"stringValue": "Jon"
},
{
"stringValue": "Smith"
},
]
]
}
}
我只需要在 table user
中获取所有用户的完整详细信息(为了方便起见,现在我只插入了一条记录)并显示确切的 user_id
而不是 blobValue
。不确定如何将此 UUID 二进制文件转换为响应中的 9a9cbfga7426471aaf2731be7tb53ii2
或 9a9cbfga-7426-471a-af27-31be7tb53ii2
等可重写形式。
我对处理 MYSQL 和 Aurora 中的查询有点陌生,非常感谢帮助我解决这个问题的任何帮助。提前致谢。
Mysql 8 具有此功能,因为 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_bin-to-uuid
和 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin
但你必须手动完成。
因为我无法在任何地方插入您的数据,所以 select 可以
CREATE TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL
)
INSERT INTO user VALUES (UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")),
"Jon",
"Smith");
SELECT * from user where user_id = UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f","-",""))
user_id | first_name | last_name
:------ | :--------- | :--------
null | Jon | Smith
SELECT CONCAT(SUBSTRING(HEX(user_id),1,8),'-',
SUBSTRING(HEX(user_id),9,4),'-',
SUBSTRING(HEX(user_id),13,4),'-',
SUBSTRING(HEX(user_id),17,12)) user_id,first_name,last_name FROM user
user_id | first_name | last_name
:------------------------------ | :--------- | :--------
3F06AF63-A93C-11E4-979700505690 | Jon | Smith
db<>fiddle here
但无论如何您都需要文本,请保留原始文本,这样您就不需要再次对数据进行 unhex 十六进制处理
CREATE TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
userid_txt Varchar(3&)
);
我有一个 AWS RDS Aurora MySQL 连接。以下是我要执行的操作创建、插入和获取数据的步骤:
创建table:
CREATE TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
);
插入table:
INSERT INTO user VALUES (
UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-","")),
"Jon",
"Smith"
);
从table获取:
SELECT * FROM user WHERE user_id = UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-",""));
触发我的函数获取数据的处理函数如下:
module.exports.fetchUser = async (event, context, callback) => {
const params = {
resourceArn: 'arn:aws:rds:*********:cluster:************',
secretArn: 'arn:aws:secretsmanager:*************',
sql: 'SELECT * FROM user WHERE user_id = UNHEX(REPLACE("9a9cbfga-7426-471a-af27-31be7tb53ii2", "-",""))',
database: 'dev_db1',
continueAfterTimeout: true,
includeResultMetadata: true
}
try {
const db_res = await rdsDataService.executeStatement(params).promise();
const response = {
body: {
message: 'Data fetched',
data: JSON.stringify(db_res, null, 2)
}
};
callback(null, response);
} catch (error) {
callback(null, error)
}
};
为相同的结果执行 http 数据 API 端点:
{
"body": {
"message": "Data fetched",
"data": [
[
{
"blobValue": {
"type": "Buffer",
"data": [
202,
136,
22,
206,
45,
214,
75,
233,
156,
28,
163,
223,
186,
115,
89,
107
]
}
},
{
"stringValue": "Jon"
},
{
"stringValue": "Smith"
},
]
]
}
}
我只需要在 table user
中获取所有用户的完整详细信息(为了方便起见,现在我只插入了一条记录)并显示确切的 user_id
而不是 blobValue
。不确定如何将此 UUID 二进制文件转换为响应中的 9a9cbfga7426471aaf2731be7tb53ii2
或 9a9cbfga-7426-471a-af27-31be7tb53ii2
等可重写形式。
我对处理 MYSQL 和 Aurora 中的查询有点陌生,非常感谢帮助我解决这个问题的任何帮助。提前致谢。
Mysql 8 具有此功能,因为 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_bin-to-uuid 和 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin
但你必须手动完成。
因为我无法在任何地方插入您的数据,所以 select 可以
CREATE TABLE user ( user_id BINARY(16) PRIMARY KEY NOT NULL, first_name VARCHAR(25) NOT NULL, last_name VARCHAR(25) NOT NULL )
INSERT INTO user VALUES (UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")), "Jon", "Smith");
SELECT * from user where user_id = UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f","-",""))
user_id | first_name | last_name :------ | :--------- | :-------- null | Jon | Smith
SELECT CONCAT(SUBSTRING(HEX(user_id),1,8),'-', SUBSTRING(HEX(user_id),9,4),'-', SUBSTRING(HEX(user_id),13,4),'-', SUBSTRING(HEX(user_id),17,12)) user_id,first_name,last_name FROM user
user_id | first_name | last_name :------------------------------ | :--------- | :-------- 3F06AF63-A93C-11E4-979700505690 | Jon | Smith
db<>fiddle here
但无论如何您都需要文本,请保留原始文本,这样您就不需要再次对数据进行 unhex 十六进制处理
CREATE TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
userid_txt Varchar(3&)
);