From cc28a7cae6fe5182e96dc01e1c2b26a89fbe6340 Mon Sep 17 00:00:00 2001 From: pengbingjie Date: Thu, 27 Feb 2025 15:49:03 +0800 Subject: [PATCH] binary utf8 --- storage/ctc/ha_ctc_ddl.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/storage/ctc/ha_ctc_ddl.cc b/storage/ctc/ha_ctc_ddl.cc index 30205b9..7eaf5ec 100644 --- a/storage/ctc/ha_ctc_ddl.cc +++ b/storage/ctc/ha_ctc_ddl.cc @@ -1212,8 +1212,7 @@ static int ctc_ddl_create_table_fill_foreign_key_info(TcDb__CtcDDLCreateTableDef static void ctc_fill_prefix_func_key_part(TcDb__CtcDDLTableKeyPart *req_key_part, const Field *field, uint16 prefix_len) { req_key_part->is_func = true; - if (field->real_type() == MYSQL_TYPE_BLOB && field->charset() == &my_charset_bin && - field->is_flag_set(BINARY_FLAG)) { + if (field->charset() == &my_charset_bin && field->is_flag_set(BINARY_FLAG)) { req_key_part->func_name = const_cast("substrb"); snprintf(req_key_part->func_text, FUNC_TEXT_MAX_LEN - 1, "substrb(%s,1,%d)", field->field_name, prefix_len); @@ -1280,6 +1279,7 @@ static uint32_t ctc_fill_func_key_part(TABLE *form, THD *thd, TcDb__CtcDDLTableK Item **args = func_expr_item->arguments(); uint32_t col_item_count = 0; Field *field = nullptr; + bool is_binary_flag = false; for (uint32_t i = 0; i < arg_count; i++) { field = ctc_get_field_by_name(form, const_cast(args[i]->item_name.ptr())); if (field && field->is_gcol()) { @@ -1294,6 +1294,7 @@ static uint32_t ctc_fill_func_key_part(TABLE *form, THD *thd, TcDb__CtcDDLTableK return CT_ERROR; } req_key_part->name = const_cast(args[i]->item_name.ptr()); + is_binary_flag = field && field->is_flag_set(BINARY_FLAG); col_item_count++; } } @@ -1314,6 +1315,10 @@ static uint32_t ctc_fill_func_key_part(TABLE *form, THD *thd, TcDb__CtcDDLTableK //处理char带charset设置 expr_str =std::regex_replace(expr_str, reg_charset2, ""); } + if (is_binary_flag && strcmp(req_key_part->func_name, "substr") == 0) { + req_key_part->func_name = const_cast("substrb"); + expr_str.replace(expr_str.begin(), expr_str.begin() + strlen("substr"), "substrb"); + } strncpy(req_key_part->func_text, expr_str.c_str(), FUNC_TEXT_MAX_LEN - 1); return CT_SUCCESS; } -- Gitee