【问题标题】:Change MySQL stored procedure 'Database Collation' name更改 MySQL 存储过程“数据库排序规则”名称
【发布时间】:2015-12-18 10:10:05
【问题描述】:

我已将数据库从本地机器导入到服务器机器。导入数据库时​​,系统默认将数据库的字符集值设置为“拉丁”。我已将数据库的字符集更改为“utf8”。但是,数据库排序规则值的存储过程不会被修改。目前它是“latin1_swedish_ci”。如何将所有存储过程的数据库排序规则值从“latin1_swedish_ci”更改为“utf8_general_ci”。

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = DB_Name;

USE DB_Name;
ALTER DATABASE DB_Name
DEFAULT CHARACTER SET = utf8
DEFAULT COLLATE=utf8_general_ci;

SET NAMES UTF8;

提前致谢。

【问题讨论】:

  • 一个选项是 DROP PROCEDURE 和 CREATE PROCEDURE。另一种选择(不太推荐)可以手动更新数据库mysql 的表procdb_collation 列。理想的做法是正确配置 MySQL 服务器,然后进行导入。
  • 能否再次运行导入?我会尝试在导入之前解决这个问题。在开始导入之前指定正确的编码更容易。您的数据库转储是否包含 SET NAMES 命令?
  • @olegsv 是的,你是对的。我在使用 SET NAMES 导入数据库转储和转储包含之前解决了这个问题。

标签: mysql stored-procedures mysql-workbench


【解决方案1】:

CREATE PROCEDURE and CREATE FUNCTION Syntax 下所述(强调):

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

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

【讨论】:

  • 文档并没有真正告诉你如何使用它们。 mysql 工作台也有一个错误,告诉你 COLLATE 总是无效的,即使它是。
  • 在创建过程/函数之前设置set @@local.collation_server = utf8mb4_unicode_ci;, set @@local.character_set_server = utf8mb4;
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2012-07-27
  • 2011-04-08
  • 2011-03-02
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多