goInception icon indicating copy to clipboard operation
goInception copied to clipboard

8.0 字符集设置为utf8,会出现Unknown charset utf8mb3问题

Open dibrother opened this issue 2 years ago • 9 comments

描述 在进行8.0的数据变更时,当设置character_set_server=utf8, check时出现 Unknown charset utf8mb3

重现

库表创建

-- 建库表
create database aaa;
create table t1 (id int primary key);

-- 字符集状态:
root@localhost [(none)]>show variables like '%char%';
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| character_set_client     | utf8mb4                                                        |
| character_set_connection | utf8mb4                                                        |
| character_set_database   | utf8mb3                                                        |
| character_set_filesystem | binary                                                         |
| character_set_results    | utf8mb4                                                        |
| character_set_server     | utf8mb3                                                        |
| character_set_system     | utf8mb3                                                        |
| character_sets_dir       | /usr/local/mysql-5.7.40-linux-glibc2.12-x86_64/share/charsets/ |
+--------------------------+----------------------------------------------------------------+
8 rows in set (0.00 sec)

config相关

goinctpion 使用默认的 config配置(未更改任何项)

测试用例

[root@test151 goinc]# cat test.py 
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import pymysql
import prettytable as pt
tb = pt.PrettyTable()

sql = '''/*--user=test_user;--password=123456;--host=127.0.0.1;--check=1;--port=3306;*/
inception_magic_start;
use aaa;
ALTER TABLE `t1`
    add `v1` varchar(20) ,
    add `v2` varchar(20) DEFAULT '0' COMMENT 'v2';

inception_magic_commit;'''

conn = pymysql.connect(host='127.0.0.1', user='', passwd='',
                       db='', port=4000, charset="utf8mb4")
cur = conn.cursor()
ret = cur.execute(sql)
result = cur.fetchall()
cur.close()
conn.close()

tb.field_names = [i[0] for i in cur.description]
for row in result:
    tb.add_row(row)
print(tb)

测试结果

[root@test151 goinc]# python test.py 
time="2022/11/22 18:01:43.601" level=info msg="con:7 new connection 127.0.0.1:39512" file=server.go func=onConn line=319
time="2022/11/22 18:01:43.621" level=info msg="con:7 close connection" file=server.go func=func1 line=321
+----------+---------+-------------+-----------------+--------------------------+---------------------------------------------------+---------------+--------------+---------------+--------------+---------+-------------+
| order_id |  stage  | error_level |   stage_status  |      error_message       |                        sql                        | affected_rows |   sequence   | backup_dbname | execute_time | sqlsha1 | backup_time |
+----------+---------+-------------+-----------------+--------------------------+---------------------------------------------------+---------------+--------------+---------------+--------------+---------+-------------+
|    1     | CHECKED |      0      | Audit Completed |           None           |                      use aaa                      |       0       | 0_0_00000000 |      None     |      0       |   None  |      0      |
|    2     | CHECKED |      2      | Audit Completed | Unknown charset utf8mb3. |                  ALTER TABLE `t1`                 |       0       | 0_0_00000001 |      None     |      0       |   None  |      0      |
|          |         |             |                 | Unknown charset utf8mb3. |                 add `v1` varchar(20) ,            |               |              |               |              |         |             |
|          |         |             |                 |                          |     add `v2` varchar(20) DEFAULT '0' COMMENT 'v2' |               |              |               |              |         |             |
+----------+---------+-------------+-----------------+--------------------------+---------------------------------------------------+---------------+--------------+---------------+--------------+---------+-------------+

环境

  • 数据库: [mysql]
  • 版本: [8.0.25/8.0.30]
  • goinc版本:1.2.4

dibrother avatar Nov 22 '22 10:11 dibrother

这个issue没有人解决么

xubodreamsky avatar Mar 15 '23 05:03 xubodreamsky

我也遇到这个问题了,使用v1.3.0最新版本的goInception,阿里云的RDS默认设置 character_set_client utf8mb4 character_set_connection utf8mb4 character_set_database utf8mb3 character_set_filesystem binary character_set_results character_set_server utf8mb3 character_set_system utf8mb3 character_sets_dir /u01/mysql80_20220730/share/charsets/

提交建表check就会报Unknown charset utf8mb3

1454513232 avatar Mar 20 '23 13:03 1454513232

已修复. 请升级到版本 v1.3.0-68. 也可修改MySQL参数character_set_database为utf8mb4,该更新是安全的,不会影响旧的库/表,且兼容utf8字符集.

hanchuanchuan avatar Mar 20 '23 14:03 hanchuanchuan

character_set_database设置为utf8mb4, 使用v1.3.0-68版本,普通审核无异常。但针对表字符集为utf8mb3的表进行add column操作审核时,仍会出现unknown charset utf8mb3.

create table test ( id int , name varicahr(20), city_code varchar(5), primary key (id) ) engine=innodb default character=utf8mb3;

zhangguangrui1991 avatar Apr 10 '23 07:04 zhangguangrui1991

mysql 8.0.32 出现和楼上一样的问题

另外这个参数为什么没有生效, support_charset = "utf8,utf8mb4,utf8mb3"

debug日志粒度太粗也没看出有什么问题

time="2023/04/14 17:27:51.150" level=info msg="con:1 new connection 10.189.。。。。。:。。。" file=server.go func=onConn line=319
time="2023/04/14 17:27:51.151" level=debug msg="con:0 ActivePendingTxn select HIGH_PRIORITY * from mysql.global_variables where variable_name in ('autocommit', 'sql_mode', 'max_allowed_packet', 'time_zone', 'block_encryption_mode', 'tidb_skip_utf8_check', 'tidb_index_join_batch_size', 'tidb_index_lookup_size', 'tidb_index_lookup_concurrency', 'tidb_index_lookup_join_concurrency', 'tidb_index_serial_scan_concurrency', 'tidb_hash_join_concurrency', 'tidb_projection_concurrency', 'tidb_hashagg_partial_concurrency', 'tidb_hashagg_final_concurrency', 'tidb_backoff_lock_fast', 'tidb_constraint_check_in_place', 'tidb_ddl_reorg_worker_cnt', 'tidb_opt_insubquery_unfold', 'tidb_distsql_scan_concurrency', 'tidb_max_chunk_size', 'tidb_enable_cascades_planner', 'tidb_retry_limit', 'tidb_disable_txn_auto_retry')" file=adapter.go func=buildExecutor line=278
time="2023/04/14 17:27:51.153" level=debug msg=mysqlServerVersion file=session_inception.go func=mysqlServerVersion line=1685
time="2023/04/14 17:27:51.155" level=debug msg="db version: 80032" file=session_inception.go func=mysqlServerVersion line=1739
time="2023/04/14 17:27:51.155" level=debug msg=setSqlSafeUpdates file=session_inception.go func=setSqlSafeUpdates line=1944
time="2023/04/14 17:27:51.156" level=debug msg=setLockWaitTimeout file=session_inception.go func=setLockWaitTimeout line=1966
time="2023/04/14 17:27:51.156" level=debug msg=initDisableTypes file=session_inception.go func=initDisableTypes line=8589
time="2023/04/14 17:27:51.156" level=debug msg=processCommand file=session_inception.go func=processCommand line=557
time="2023/04/14 17:27:51.156" level=debug msg=executeInceptionSet file=session_inception.go func=executeInceptionSet line=5928
time="2023/04/14 17:27:51.156" level=debug msg=initDisableTypes file=session_inception.go func=initDisableTypes line=8589
time="2023/04/14 17:27:51.156" level=info msg="inception set session merge_alter_table = true, check_primary_key = true" file=session_inception.go func=executeInc line=440
time="2023/04/14 17:27:51.156" level=debug msg=processCommand file=session_inception.go func=processCommand line=557
time="2023/04/14 17:27:51.156" level=debug msg=checkAlterTable file=session_inception.go func=checkAlterTable line=3166
time="2023/04/14 17:27:51.161" level=debug msg=mysqlCheckField file=session_inception.go func=mysqlCheckField line=4125

NoskyOrg avatar Apr 14 '23 09:04 NoskyOrg

session/common.go


var charSets = map[string]int{
	"armscii8": 1,
	"ascii":    1,
	"big5":     2,
	"binary":   1,
	"cp1250":   1,
	"cp1251":   1,
	"cp1256":   1,
	"cp1257":   1,
	"cp850":    1,
	"cp852":    1,
	"cp866":    1,
	"cp932":    2,
	"dec8":     1,
	"eucjpms":  3,
	"euckr":    2,
	"gb18030":  4,
	"gb2312":   2,
	"gbk":      2,
	"geostd8":  1,
	"greek":    1,
	"hebrew":   1,
	"hp8":      1,
	"keybcs2":  1,
	"koi8r":    1,
	"koi8u":    1,
	"latin1":   1,
	"latin2":   1,
	"latin5":   1,
	"latin7":   1,
	"macce":    1,
	"macroman": 1,
	"sjis":     2,
	"swe7":     1,
	"tis620":   1,
	"ucs2":     2,
	"ujis":     3,
	"utf16":    4,
	"utf16le":  4,
	"utf32":    4,
	"utf8":     3,
	"utf8mb3":  3,
	"utf8mb4":  4,
}

NoskyOrg avatar Apr 14 '23 11:04 NoskyOrg

请升级到 v1.3.0-72 版本后重试

hanchuanchuan avatar May 03 '23 02:05 hanchuanchuan

请升级到 v1.3.0-72 版本后重试

hao,我试试

NoskyOrg avatar May 04 '23 06:05 NoskyOrg

由于此问题没有最近的活动,因此已被自动标记为陈旧。如果没有进一步的活动,会作为不活跃issue关闭。感谢你对本项目的贡献。 This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Jun 18 '23 03:06 stale[bot]