mysql/mysql_change_charset.sql
authorAlan Knowles <alan@roojs.com>
Wed, 23 Sep 2015 10:10:23 +0000 (18:10 +0800)
committerAlan Knowles <alan@roojs.com>
Wed, 23 Sep 2015 10:10:23 +0000 (18:10 +0800)
mysql/mysql_change_charset.sql

index e69de29..e0c9d89 100644 (file)
@@ -0,0 +1,59 @@
+
+
+DROP PROCEDURE IF EXISTS mysql_change_charset;
+
+delimiter $$
+
+
+CREATE PROCEDURE mysql_change_charset(mytb TEXT)
+    BEGIN
+    DECLARE mydb TEXT;
+    
+    SELECT database() INTO mydb;
+    
+    
+    SELECT
+        IF(
+            dbtb2='.',
+            CONCAT('ALTER TABLE ',dbtb1,' ENGINE=InnoDB'),
+            CONCAT('SELECT ''',dbtb1,' is Already InnoDB'' as \"No Need to Convert\"')
+        )
+    INTO
+        @ConvertEngineSQL
+        
+    FROM (
+        SELECT
+            CONCAT(A.db,'.',A.tb) dbtb1,
+            CONCAT(IFNULL(B.db,''),'.',IFNULL(B.tb,'')) dbtb2,engine
+        FROM
+            (
+                SELECT
+                    table_schema db,table_name tb,engine
+                FROM
+                    information_schema.tables
+                WHERE
+                    table_schema=mydb and table_name=mytb
+            ) A
+        LEFT JOIN
+            (
+                SELECT
+                    table_schema db,table_name tb
+                FROM
+                    information_schema.tables
+                WHERE
+                    table_schema=mydb and table_name=mytb AND engine='InnoDB'
+            ) B
+        USING
+            (db,tb)
+    ) AA;
+            
+    -- SELECT ConvertEngineSQL; -- ???
+    PREPARE st FROM @ConvertEngineSQL;
+    EXECUTE st;
+    DEALLOCATE PREPARE st;
+
+END;
+
+$$
+
+DELIMITER ;
\ No newline at end of file