Mysql “我如何解决?”;排序规则对字符集';无效;拉丁语1'&引用;?

Mysql “我如何解决?”;排序规则对字符集';无效;拉丁语1'&引用;?,mysql,rds,Mysql,Rds,我知道这个问题被问了很多,但由于我已经尝试了每一个答案,我想再问一次更详细的信息 我正在将数据从不同的数据库(不同结构的MySQL 5.6.34)迁移到MySQL 5.7.16 对于不同的尝试,我得到以下错误: 排序规则“utf8\U unicode\U ci/utf8\U general\U ci”对字符集“latin1”无效 我的参数设置如下 character_set_client => utf8

我知道这个问题被问了很多,但由于我已经尝试了每一个答案,我想再问一次更详细的信息

我正在将数据从不同的数据库(不同结构的MySQL 5.6.34)迁移到MySQL 5.7.16

对于不同的尝试,我得到以下错误:

排序规则“utf8\U unicode\U ci/utf8\U general\U ci”对字符集“latin1”无效

我的参数设置如下

 character_set_client =>      utf8                                      
 character_set_connection =>  utf8                                      
 character_set_database =>    utf8                                      
 character_set_filesystem =>  binary                                    
 character_set_results =>     utf8                                      
 character_set_server =>      utf8                                      
 character_set_system =>      utf8                                     
 collation_connection =>  utf8_general_ci   
 collation_database =>    utf8_general_ci   
 collation_server =>      utf8_unicode_ci
此外,这两个表分别设置为utf8和utf_general_ci

这里是insert查询

INSERT INTO t1 (detail)SELECT null_if_empty(detail) COLLATE utf_general_ci FROM t2;
下面是使用的函数“null\u if\u empty”


PS:这两个数据库都保存在AWS RDS上。

因此问题似乎是由过程(null\u if\u empty)排序规则和字符集引起的。设置为拉丁语和拉丁语瑞典语。MySQL文件说

如果字符集和排序规则属性不存在,则使用在例程创建时生效的数据库字符集和排序规则。为避免服务器使用数据库字符集和排序规则,请为字符数据参数提供显式字符集和排序属性

如果更改数据库默认字符集或排序规则,则存储 必须删除并重新创建使用数据库默认值的例程 以便他们使用新的默认值

在这个答复中也作了说明


因此,问题似乎是由过程(如果为空,则为null)排序规则和字符集引起的。设置为拉丁语和拉丁语瑞典语。MySQL文件说

如果字符集和排序规则属性不存在,则使用在例程创建时生效的数据库字符集和排序规则。为避免服务器使用数据库字符集和排序规则,请为字符数据参数提供显式字符集和排序属性

如果更改数据库默认字符集或排序规则,则存储 必须删除并重新创建使用数据库默认值的例程 以便他们使用新的默认值

在这个答复中也作了说明

CREATE DEFINER=`root`@`localhost` FUNCTION `null_if_empty`(value TEXT) RETURNS text CHARSET utf8

BEGIN DECLARE response_value TEXT DEFAULT NULL; IF (LENGTH(value) > 0) THEN
SET response_value = value; ELSE
SET response_value = NULL; END IF; RETURN response_value; END;