Skip to content

Commit 0a058bd

Browse files
authored
server: replace instead of truncate encoded result (#61080) (#61195)
close #61085
1 parent 58bcec1 commit 0a058bd

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

pkg/server/internal/column/result_encoder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (d *ResultEncoder) EncodeData(src []byte) []byte {
124124

125125
// EncodeWith encodes bytes with the given encoding.
126126
func (d *ResultEncoder) EncodeWith(src []byte, enc charset.Encoding) []byte {
127-
data, err := enc.Transform(d.buffer, src, charset.OpEncode)
127+
data, err := enc.Transform(d.buffer, src, charset.OpEncodeReplace)
128128
if err != nil {
129129
logutil.BgLogger().Debug("encode error", zap.Error(err))
130130
}

tests/integrationtest/r/new_character_set.result

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,16 @@ set names utf8mb4;
112112
show variables like 'collation_connection';
113113
Variable_name Value
114114
collation_connection utf8mb4_bin
115+
set character_set_results = "gbk";
116+
select cast(0x414141E280A9424242 as char charset utf8mb4);
117+
cast(0x414141E280A9424242 as char charset utf8mb4)
118+
AAA?BBB
119+
SET character_set_results = @undefined_var;
120+
DROP TABLE if exists t61085;
121+
create table t61085 (a char(255) charset gbk);
122+
insert into t61085 values ('AAA');
123+
set SESSION sql_mode = '';
124+
select * from t61085 where a = cast(0x41414180424242 as char charset gbk);
125+
a
126+
AAA
127+
DROP TABLE t61085;

tests/integrationtest/t/new_character_set.test

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,14 @@ show variables like 'collation_connection';
8383
set default_collation_for_utf8mb4 = default;
8484
set names utf8mb4;
8585
show variables like 'collation_connection';
86+
87+
# Bug#61085: https://github.com/pingcap/tidb/issues/61085 should replace instead of truncation for result charset
88+
set character_set_results = "gbk";
89+
select cast(0x414141E280A9424242 as char charset utf8mb4);
90+
SET character_set_results = @undefined_var;
91+
DROP TABLE if exists t61085;
92+
create table t61085 (a char(255) charset gbk);
93+
insert into t61085 values ('AAA');
94+
set SESSION sql_mode = '';
95+
select * from t61085 where a = cast(0x41414180424242 as char charset gbk);
96+
DROP TABLE t61085;

0 commit comments

Comments
 (0)