2015-12-18 53 views
9

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

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; 

在此先感谢。

+0

一个选项是DROP PROCEDURE和CREATE PROCEDURE。另一个选项(不太推荐)可以手动更新数据库mysql的'proc'表的'db_collat​​ion'列。理想的是正确配置你的MySQL服务器,然后进行导入。 – wchiquito

+0

你可以再次运行导入吗?我想在导入之前解决这个问题。在开始导入之前,更容易指定正确的编码。你的数据库转储包含SET NAMES命令吗? – olegsv

+0

@olegsv是的,你是对的。在导入包含SET NAMES的数据库转储和转储之前,我解决了这个问题。 – Nisar

回答

6

(强调)作为CREATE PROCEDURE and CREATE FUNCTION Syntax下记载:

如果CHARACTER SETCOLLATE属性不存在,数据库的字符集和归类在例程创建时间效果使用。为避免服务器使用数据库字符集和归类,请为字符数据参数提供明确的CHARACTER SETCOLLATE属性。

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

+1

该文档并没有真正告诉你如何使用它们。另外mysql工作台有一个错误,告诉你COLLATE总是无效的,即使它是。 –

+0

@Downvoter:关心评论? – eggyal