mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-29968 Functions in default values in tables with some character sets break SHOW CREATE (and mysqldump)
Item:print_for_table_def() uses QT_TO_SYSTEM_CHARSET to print the DEFAULT expression into FRM file during CREATE TABLE. Therefore, the expression is encoded in utf8 in FRM. get_field_default_value() erroneously used field->charset() to print the DEFAULT expression at SHOW CREATE TABLE time. Fixing get_field_default_value() to use &my_charset_utf8mb4_general_ci instead. This makes DEFAULT work in the way way with: - virtual column expressions: if (field->vcol_info) { StringBuffer<MAX_FIELD_WIDTH> str(&my_charset_utf8mb4_general_ci); field->vcol_info->print(&str); - check constraint expressions: if (field->check_constraint) { StringBuffer<MAX_FIELD_WIDTH> str(&my_charset_utf8mb4_general_ci); field->check_constraint->print(&str); Additional cleanup: Fixing system_charset_info to &my_charset_utf8mb4_general_ci in a few places to make non-BMP characters work in DEFAULT, virtual column, check constraint expressions.
This commit is contained in:
@ -3182,7 +3182,7 @@ static uint get_table_structure(const char *table, const char *db, char *table_t
|
||||
|
||||
fprintf(sql_file,
|
||||
"SET @saved_cs_client = @@character_set_client;\n"
|
||||
"SET character_set_client = utf8;\n"
|
||||
"SET character_set_client = utf8mb4;\n"
|
||||
"/*!50001 CREATE VIEW %s AS SELECT\n",
|
||||
result_table);
|
||||
|
||||
@ -3250,7 +3250,7 @@ static uint get_table_structure(const char *table, const char *db, char *table_t
|
||||
{
|
||||
fprintf(sql_file,
|
||||
"/*!40101 SET @saved_cs_client = @@character_set_client */;\n"
|
||||
"/*!40101 SET character_set_client = utf8 */;\n"
|
||||
"/*!40101 SET character_set_client = utf8mb4 */;\n"
|
||||
"%s%s;\n"
|
||||
"/*!40101 SET character_set_client = @saved_cs_client */;\n",
|
||||
is_log_table ? "CREATE TABLE IF NOT EXISTS " : "",
|
||||
|
Reference in New Issue
Block a user