mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
Bug#28862 Extended Latin1 characters get lost in CVS engine
Problem: Temporary buffer which is used for quoting and escaping was initialized to character set utf8, and thus didn't allow to store data in other character sets. Fix: changing character set of the buffer to be able to store any arbitrary sequence of bytes. mysql-test/r/csv.result: Adding test case mysql-test/t/csv.test: Adding test case sql/examples/ha_tina.cc: Changing character set of the buffer to "binary".
This commit is contained in:
parent
5bc3eb2e11
commit
39700afdb9
3 changed files with 41 additions and 2 deletions
|
@ -5009,3 +5009,24 @@ select * from bug15205;
|
|||
val
|
||||
drop table bug15205;
|
||||
drop table bug15205_2;
|
||||
set names latin1;
|
||||
create table t1 (
|
||||
c varchar(1),
|
||||
name varchar(64)
|
||||
) character set latin1 engine=csv;
|
||||
insert into t1 values (0xC0,'LATIN CAPITAL LETTER A WITH GRAVE');
|
||||
insert into t1 values (0xE0,'LATIN SMALL LETTER A WITH GRAVE');
|
||||
insert into t1 values (0xEE,'LATIN SMALL LETTER I WITH CIRCUMFLEX');
|
||||
insert into t1 values (0xFE,'LATIN SMALL LETTER THORN');
|
||||
insert into t1 values (0xF7,'DIVISION SIGN');
|
||||
insert into t1 values (0xFF,'LATIN SMALL LETTER Y WITH DIAERESIS');
|
||||
select hex(c), c, name from t1 order by 1;
|
||||
hex(c) c name
|
||||
C0 À LATIN CAPITAL LETTER A WITH GRAVE
|
||||
E0 à LATIN SMALL LETTER A WITH GRAVE
|
||||
EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
|
||||
F7 ÷ DIVISION SIGN
|
||||
FE þ LATIN SMALL LETTER THORN
|
||||
FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1410,3 +1410,21 @@ select * from bug15205;
|
|||
drop table bug15205;
|
||||
drop table bug15205_2;
|
||||
|
||||
#
|
||||
# Bug#28862 "Extended Latin1 characters get lost in CVS engine"
|
||||
#
|
||||
set names latin1;
|
||||
create table t1 (
|
||||
c varchar(1),
|
||||
name varchar(64)
|
||||
) character set latin1 engine=csv;
|
||||
insert into t1 values (0xC0,'LATIN CAPITAL LETTER A WITH GRAVE');
|
||||
insert into t1 values (0xE0,'LATIN SMALL LETTER A WITH GRAVE');
|
||||
insert into t1 values (0xEE,'LATIN SMALL LETTER I WITH CIRCUMFLEX');
|
||||
insert into t1 values (0xFE,'LATIN SMALL LETTER THORN');
|
||||
insert into t1 values (0xF7,'DIVISION SIGN');
|
||||
insert into t1 values (0xFF,'LATIN SMALL LETTER Y WITH DIAERESIS');
|
||||
select hex(c), c, name from t1 order by 1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -301,7 +301,7 @@ ha_tina::ha_tina(TABLE *table_arg)
|
|||
chain_size(DEFAULT_CHAIN_LENGTH), records_is_known(0)
|
||||
{
|
||||
/* Set our original buffers from pre-allocated memory */
|
||||
buffer.set(byte_buffer, IO_SIZE, system_charset_info);
|
||||
buffer.set(byte_buffer, IO_SIZE, &my_charset_bin);
|
||||
chain= chain_buffer;
|
||||
}
|
||||
|
||||
|
@ -447,7 +447,7 @@ int ha_tina::find_current_row(byte *buf)
|
|||
else
|
||||
buffer.append(*mapped_ptr);
|
||||
}
|
||||
(*field)->store(buffer.ptr(), buffer.length(), system_charset_info);
|
||||
(*field)->store(buffer.ptr(), buffer.length(), buffer.charset());
|
||||
}
|
||||
next_position= (end_ptr - share->mapped_file)+1;
|
||||
/* Maybe use \N for null? */
|
||||
|
|
Loading…
Add table
Reference in a new issue