MySQLDUMP:关于导出数据表结构collate属性的问题

作者简介:高鹏,笔名八怪。《深入理解MySQL主从原理》图书作者,同时运营个人公众号“MySQL学习”,持续分享遇到的有趣case以及代码解析!

关注这个问题主要是怕使用mysqldump升级的时候,因为做跨版本升级我一般任何业务库的数据导出导入是最稳当的。如果表的字符集遇到问题,这是一个比较严重的问题,容易导致上线后join报错或者效率降低(隐式转换),因此我稍微测试了一下,并且找了一下逻辑。如果这些结论有误请反馈给我,一起再探讨一下。

一、MySQLDUMP的建表语句来源

实际上MySQLDUMP的建表语句和show create table 来源一致,都来自如下:

#9  0x0000000004b57806 in dd::get_implicit_tablespace_options (thd=0xad2eb70, table=0xb365c18, autoextend_size=0x7fffe47ca360) at /newdata/mysql-8.0.23/sql/dd/dd_table.cc:3100 #10 0x000000000388fdaa in store_create_info (thd=0xad2eb70, table_list=0xb353340, packet=0x7fffe47cb0d0, create_info_arg=0x0, show_database=false)     at /newdata/mysql-8.0.23/sql/sql_show.cc:2245 #11 0x000000000388b69a in mysqld_show_create (thd=0xad2eb70, table_list=0xb353340) at /newdata/mysql-8.0.23/sql/sql_show.cc:1182 #12 0x000000000388923f in Sql_cmd_show_create_table::execute_inner (this=0xb3526e0, thd=0xad2eb70) at /newdata/mysql-8.0.23/sql/sql_show.cc:405 #13 0x0000000003899a5a in Sql_cmd_show_noplan::execute (this=0xb3526e0, thd=0xad2eb70) at /newdata/mysql-8.0.23/sql/sql_show.h:186 #14 0x00000000037fa060 in mysql_execute_command (thd=0xad2eb70, first_level=true) at /newdata/mysql-8.0.23/sql/sql_parse.cc:4407 #15 0x00000000037fbf41 in dispatch_sql_command (thd=0xad2eb70, parser_state=0x7fffe47cda50) at /newdata/mysql-8.0.23/sql/sql_parse.cc:4988