From 30bb84686eb590608ed7ea53e4d9ca25969f7da3 Mon Sep 17 00:00:00 2001 From: Eric Long Date: Wed, 5 May 2021 16:40:32 -0400 Subject: [PATCH] 0004973: use utf8mb4 when available --- .../symmetric/db/mysql/MySqlSymmetricDialect.java | 8 ++++++-- .../jumpmind/symmetric/db/mysql/MySqlTriggerTemplate.java | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlSymmetricDialect.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlSymmetricDialect.java index f756e213e5..d893fce3be 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlSymmetricDialect.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlSymmetricDialect.java @@ -66,6 +66,8 @@ public class MySqlSymmetricDialect extends AbstractSymmetricDialect implements I private String functionTemplateKeySuffix = null; private boolean isConvertZeroDateToNull; + + private String characterSet; public MySqlSymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) { super(parameterService, platform); @@ -82,7 +84,6 @@ public MySqlSymmetricDialect(IParameterService parameterService, IDatabasePlatfo log.warn("Cannot convert zero dates to null because unable to verify sql_mode: {}", e.getMessage()); } } - this.triggerTemplate = new MySqlTriggerTemplate(this, isConvertZeroDateToNull); int[] versions = Version.parseVersion(getProductVersion()); if (getMajorVersion() == 5 && (getMinorVersion() == 0 || (getMinorVersion() == 1 && versions[2] < 23))) { @@ -91,7 +92,10 @@ public MySqlSymmetricDialect(IParameterService parameterService, IDatabasePlatfo this.functionTemplateKeySuffix = PRE_5_7_6; } else { this.functionTemplateKeySuffix = POST_5_7_6; - } + } + + characterSet = parameterService.getString(ParameterConstants.DB_MASTER_COLLATION, Version.isOlderThanVersion(getProductVersion(), "5.5.3") ? "utf8" : "utf8mb4"); + this.triggerTemplate = new MySqlTriggerTemplate(this, isConvertZeroDateToNull, characterSet); } @Override diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlTriggerTemplate.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlTriggerTemplate.java index e961aaf928..7d9c8f70d3 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlTriggerTemplate.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mysql/MySqlTriggerTemplate.java @@ -28,7 +28,7 @@ public class MySqlTriggerTemplate extends AbstractTriggerTemplate { - public MySqlTriggerTemplate(ISymmetricDialect symmetricDialect, boolean isConvertZeroDateToNull) { + public MySqlTriggerTemplate(ISymmetricDialect symmetricDialect, boolean isConvertZeroDateToNull, String characterSet) { super(symmetricDialect); emptyColumnTemplate = "''" ; stringColumnTemplate = "cast(if($(tableAlias).`$(columnName)` is null,'',concat('\"',replace(replace($(tableAlias).`$(columnName)`,'\\\\','\\\\\\\\'),'\"','\\\\\"'),'\"')) as char)\n" ; @@ -87,8 +87,8 @@ public MySqlTriggerTemplate(ISymmetricDialect symmetricDialect, boolean isConver sqlTemplates.put("updateTriggerTemplate" , "create trigger $(triggerName) after update on $(schemaName)$(tableName) \n" + " for each row begin \n" + -" DECLARE var_row_data mediumtext character set utf8; \n" + -" DECLARE var_old_data mediumtext character set utf8; \n" + +" DECLARE var_row_data mediumtext character set " + characterSet + ";\n" + +" DECLARE var_old_data mediumtext character set " + characterSet + ";\n" + " $(custom_before_update_text) \n" + " if $(syncOnUpdateCondition) and $(syncOnIncomingBatchCondition) then \n" + " set var_row_data = concat($(columns)); \n" +