Skip to content

Instantly share code, notes, and snippets.

@KenjiOhtsuka
Last active December 19, 2015 23:28
Show Gist options
  • Save KenjiOhtsuka/6034547 to your computer and use it in GitHub Desktop.
Save KenjiOhtsuka/6034547 to your computer and use it in GitHub Desktop.
MySQL で、あるスキーマの文字コードを一括で変換するプロシージャ。 (MySQL でありがちな、初期設定のままテーブルを作った後で laten 文字コード になっていたことに気づいた時の対処法を探っていたらこうなった。テストはしていない。)
DELIMITER $$
CREATE PROCEDURE sps_change_collate(schema_name varchar)
BEGIN
/*---------------------------------------------------------
[DECLARATION]
---------------------------------------------------------*/
DECLARE c CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = schema_name;
DECLARE not_found int DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = TRUE;
DECLARE table_name varchar;
DECLARE query varchar;
/*---------------------------------------------------------
[EXECUTE]
----------------------------------------------------------*/
SET query = CONCAT(
'ALTER DATABASE ',
schema_name,
' CHARACTER SET utf8');
--
OPEN c;
read_loop: LOOP
FETCH c INTO table_name;
IF not_found THEN
LEAVE read_loop;
END IF;
-- change table's default code
SET query = CONCAT(
'ALTER TABLE `',
table_name,
'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');
EXECUTE query;
-- change code of all letter type columns
SET query = CONCAT(
'ALTER TABLE `',
table_name,
'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');
EXECUTE query;
END LOOP;
CLOSE c;
END
$$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment