Merge c4e4ec6fb9
into 0a033c76c1
This commit is contained in:
commit
1af07a97cf
|
@ -192,6 +192,7 @@ func (this *Inspector) inspectOriginalAndGhostTables() (err error) {
|
|||
}
|
||||
if column.Name == mappedColumn.Name && column.Charset != mappedColumn.Charset {
|
||||
this.migrationContext.SharedColumns.SetCharsetConversion(column.Name, column.Charset, mappedColumn.Charset)
|
||||
this.migrationContext.MappedSharedColumns.SetCharsetConversion(column.Name, column.Charset, mappedColumn.Charset)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ func buildColumnsPreparedValues(columns *ColumnList) []string {
|
|||
token = fmt.Sprintf("ELT(?, %s)", column.EnumValues)
|
||||
} else if column.Type == JSONColumnType {
|
||||
token = "convert(? using utf8mb4)"
|
||||
} else if column.charsetConversion != nil {
|
||||
token = fmt.Sprintf("convert(convert(? using %s) using %s)", column.charsetConversion.FromCharset, column.charsetConversion.ToCharset)
|
||||
} else {
|
||||
token = "?"
|
||||
}
|
||||
|
@ -114,6 +116,8 @@ func BuildSetPreparedClause(columns *ColumnList) (result string, err error) {
|
|||
setToken = fmt.Sprintf("%s=ELT(?, %s)", EscapeName(column.Name), column.EnumValues)
|
||||
} else if column.Type == JSONColumnType {
|
||||
setToken = fmt.Sprintf("%s=convert(? using utf8mb4)", EscapeName(column.Name))
|
||||
} else if column.charsetConversion != nil {
|
||||
setToken = fmt.Sprintf("%s=convert(convert(? using %s) using %s)", EscapeName(column.Name), column.charsetConversion.FromCharset, column.charsetConversion.ToCharset)
|
||||
} else {
|
||||
setToken = fmt.Sprintf("%s=?", EscapeName(column.Name))
|
||||
}
|
||||
|
|
|
@ -221,6 +221,14 @@ func (this *ColumnList) SetEnumValues(columnName string, enumValues string) {
|
|||
this.GetColumn(columnName).EnumValues = enumValues
|
||||
}
|
||||
|
||||
func (this *ColumnList) SetCharsetConversion(columnName string, fromCharset string, toCharset string) {
|
||||
this.GetColumn(columnName).charsetConversion = &CharacterSetConversion{FromCharset: fromCharset, ToCharset: toCharset}
|
||||
}
|
||||
|
||||
func (this *ColumnList) IsCharsetConversion(columnName string) bool {
|
||||
return this.GetColumn(columnName).charsetConversion != nil
|
||||
}
|
||||
|
||||
func (this *ColumnList) String() string {
|
||||
return strings.Join(this.Names(), ",")
|
||||
}
|
||||
|
@ -248,10 +256,6 @@ func (this *ColumnList) Len() int {
|
|||
return len(this.columns)
|
||||
}
|
||||
|
||||
func (this *ColumnList) SetCharsetConversion(columnName string, fromCharset string, toCharset string) {
|
||||
this.GetColumn(columnName).charsetConversion = &CharacterSetConversion{FromCharset: fromCharset, ToCharset: toCharset}
|
||||
}
|
||||
|
||||
// UniqueKey is the combination of a key's name and columns
|
||||
type UniqueKey struct {
|
||||
Name string
|
||||
|
|
24
localtests/latin1text-to-utf8mb4/create.sql
Normal file
24
localtests/latin1text-to-utf8mb4/create.sql
Normal file
|
@ -0,0 +1,24 @@
|
|||
drop table if exists gh_ost_test;
|
||||
create table gh_ost_test (
|
||||
id int auto_increment,
|
||||
t text charset latin1 collate latin1_swedish_ci,
|
||||
primary key(id)
|
||||
) auto_increment=1 charset latin1 collate latin1_swedish_ci;
|
||||
|
||||
insert into gh_ost_test values (null, char(189));
|
||||
|
||||
drop event if exists gh_ost_test;
|
||||
delimiter ;;
|
||||
create event gh_ost_test
|
||||
on schedule every 1 second
|
||||
starts current_timestamp
|
||||
ends current_timestamp + interval 60 second
|
||||
on completion not preserve
|
||||
enable
|
||||
do
|
||||
begin
|
||||
insert into gh_ost_test values (null, md5(rand()));
|
||||
insert into gh_ost_test values (null, char(189));
|
||||
update gh_ost_test set t=char(190) order by id desc limit 1;
|
||||
delete from gh_ost_test where t=char(190);
|
||||
end ;;
|
1
localtests/latin1text-to-utf8mb4/extra_args
Normal file
1
localtests/latin1text-to-utf8mb4/extra_args
Normal file
|
@ -0,0 +1 @@
|
|||
--alter "convert to character set utf8mb4 collate utf8mb4_unicode_ci"
|
Loading…
Reference in New Issue
Block a user