哪个MySQL变量设置本地变量的默认整理?

问题描述 投票:0回答:1

说我有这个存储过程:

CREATE PROCEDURE x(
)
LANGUAGE SQL
DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY INVOKER
COMMENT ''
BEGIN

DECLARE test VARCHAR(50) CHARACTER SET 'utf8mb4';

-- ...

END

定义本地变量test的排序规则的mysql服务器变量是什么?

当前是(感谢mysql 8.0 ...)utf8mb4_0900_ai_ci,所以稍后在代码中我得到一个“不错的” Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='

设置

DECLARE test VARCHAR(50) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

消除了Illegal collation错误,所以我确定是此变量具有错误的0900排序规则。

但是,我不会在所有过程中重写所有局部变量以设置此显式排序规则。那么如何为服务器全局设置此设置?或至少如何为连接设置此设置?

到目前为止,除以下内容外,我还具有默认的mysql 8配置:

[mysqld]
skip-log-bin
innodb_buffer_pool_size = 4G
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci

# character_set_database  = utf8mb4
# collation_database = utf8mb4_general_ci
# character_set_client = utf8mb4
# character_set_connection = utf8mb4
# collation_connection = utf8mb4_general_ci
# character_set_results = utf8mb4

此语句在客户端连接上运行:

SET CHARACTER SET utf8mb4, NAMES utf8mb4, collation_connection = 'utf8mb4_general_ci', lc_messages = 'en_US', time_zone = '+00:00'

注释掉的变量是那些试图启动mysql服务器时抛出unknown variable '...=...'的变量,尽管这些变量是listed in mysql 8 documentation ...

mysql collation
1个回答
0
投票

来自the docs

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

[最有可能的是,存储过程是在更新配置之前创建的,在这种情况下,您要做的就是删除并重新创建它们,以便它们使用新的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.