2015-12-18 51 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