从 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 二进制文件转换为响应中的 9a9cbfga7426471aaf2731be7tb53ii29a9cbfga-7426-471a-af27-31be7tb53ii2 等可重写形式。 我对处理 MYSQL 和 Aurora 中的查询有点陌生,非常感谢帮助我解决这个问题的任何帮助。提前致谢。

Mysql 8 具有此功能,因为 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_bin-to-uuidhttps://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&)
);