2015-12-18 14 views
9

ローカルマシンからサーバーマシンにDBをインポートしました。データベースのインポート時に、DBの文字セット値はシステムのデフォルトで "Latin"に設定されます。データベースの文字セットを "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; 

ありがとうございます。 CREATE PROCEDURE and CREATE FUNCTION Syntaxの下で文書化されたよう

+0

オプションは、DROP PROCEDUREとCREATE PROCEDUREです。別のオプション(あまり推奨されない)は、データベースmysqlのテーブル 'proc'の' db_collat​​ion'カラムを手動で更新することができます。理想的なのは、MySQLサーバを適切に設定してからインポートを行うことです。 – wchiquito

+0

インポートをもう一度実行できますか?私はインポートの前にこれを解決しようとします。インポートを開始する前に、正しいエンコーディングを指定する方が簡単です。あなたのDBダンプはSET NAMESコマンドを含んでいますか? – olegsv

+0

@olegsvはい、あなたは正しいです。 DBダンプをインポートする前にこの問題を解決し、SET NAMESを含むダンプを作成しました。 – Nisar

答えて

6

(強調追加):

CHARACTER SETCOLLATE属性が存在しない場合は、ルーチンの作成時に有効なデータベースの文字セットと照合がを使用されています。サーバーがデータベースの文字セットと照合を使用しないようにするには、文字データ・パラメーターに明示的なCHARACTER SETおよびCOLLATE属性を指定します。

データベースのデフォルトの文字セットまたは照合順序を変更する場合は、データベースデフォルトを使用するストアドルーチンを削除して再作成する必要があります。これにより、新しいデフォルトが使用されます。

+1

このマニュアルでは、実際に使用方法を説明していません。また、mysql workbenchには、たとえそうであっても、COLLATEが常に無効であることを知らせるバグがあります。 –

+0

@Downvoter:コメントしますか? – eggyal

関連する問題