mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02: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:
parent
f521b8ac21
commit
350cc77fee
24 changed files with 413 additions and 179 deletions
|
|
@ -26,7 +26,7 @@ LTRIM(now()) AS a0,
|
|||
LPAD(now(),10) AS b0;
|
||||
/*M!999999\- enable the sandbox mode */
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a0` varchar(64) NOT NULL DEFAULT ltrim(current_timestamp()),
|
||||
`a1` varchar(64) GENERATED ALWAYS AS (ltrim(`a0`)) STORED,
|
||||
|
|
@ -35,7 +35,7 @@ CREATE TABLE `t1` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t2` (
|
||||
`a0` varchar(64) NOT NULL DEFAULT ltrim_oracle(current_timestamp()),
|
||||
`a1` varchar(64) GENERATED ALWAYS AS (ltrim_oracle(`a0`)) STORED,
|
||||
|
|
@ -44,13 +44,13 @@ CREATE TABLE `t2` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v1` AS SELECT
|
||||
1 AS `a0`,
|
||||
1 AS `b0` */;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v2` AS SELECT
|
||||
1 AS `a0`,
|
||||
1 AS `b0` */;
|
||||
|
|
|
|||
|
|
@ -2245,7 +2245,7 @@ CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
|
|||
# Dump table t1 using mysqldump tool
|
||||
/*M!999999\- enable the sandbox mode */
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`id` varchar(20) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
|
|
|
|||
|
|
@ -280,32 +280,32 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET l
|
|||
|
||||
USE `test`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v1` AS SELECT
|
||||
1 AS `a+b`,
|
||||
1 AS `c` */;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v2` AS SELECT
|
||||
1 AS `a+b`,
|
||||
1 AS `c`,
|
||||
1 AS `current_role()` */;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v3` AS SELECT
|
||||
1 AS `a+b`,
|
||||
1 AS `c` */;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v4` AS SELECT
|
||||
1 AS `a+b`,
|
||||
1 AS `c` */;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
SET character_set_client = utf8mb4;
|
||||
/*!50001 CREATE VIEW `v5` AS SELECT
|
||||
1 AS `a+b`,
|
||||
1 AS `c` */;
|
||||
|
|
@ -315,7 +315,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest1` /*!40100 DEFAULT CHARACTER
|
|||
|
||||
USE `mysqltest1`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL,
|
||||
|
|
@ -324,7 +324,7 @@ CREATE TABLE `t1` (
|
|||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
INSERT INTO `t1` VALUES (1,10,100),(2,20,200);
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t2` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ DO SETVAL(`a1`, 1, 0);
|
|||
CREATE SEQUENCE `x1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;
|
||||
DO SETVAL(`x1`, 1, 0);
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`)
|
||||
|
|
@ -23,7 +23,7 @@ DO SETVAL(`a1`, 1, 0);
|
|||
CREATE SEQUENCE `x1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;
|
||||
DO SETVAL(`x1`, 1, 0);
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`)
|
||||
|
|
@ -37,7 +37,7 @@ DO SETVAL(`a1`, 1, 0);
|
|||
CREATE SEQUENCE `x1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;
|
||||
DO SETVAL(`x1`, 1, 0);
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`)
|
||||
|
|
@ -47,7 +47,7 @@ INSERT INTO `t1` VALUES (1),(2);
|
|||
# dump by tables only tables
|
||||
/*M!999999\- enable the sandbox mode */
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue