1695
古いMySQLをリプレースする際に、新しいMySQLサーバを準備して、mysqldump等でデータを移行することが多いと思います。
その際にバージョン間でスキーマが異なってくることがあるのですが(特に4.x系→5.x系)、その際にスキーマを変更する効率的な方法があれば教えて下さい。
小さな規模であれば、エラーになった箇所を手作業で変更して・・・が可能なのですが、規模が大きくなるととても大変です。
CC BY-SA 3.0
2014-12-15T00:44:27.037
1597
2014-12-16T06:50:18.363
2014-12-15T03:29:10.720
30
2096
question
mysql
MySQLのバージョン間でのスキーマ違いを吸収する方法
バージョン間でスキーマが異なるのはおそらくMySQL自体が利用する管理テーブルのカラムだと思うので mysql_upgrade
コマンドを試されるのはいかがでしょうか。

<http://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html>
CC BY-SA 3.0
2014-12-16T01:52:34.550
1624
2014-12-16T01:52:34.550
2497
1597
answer
4.xとありますが，4.0と4.1でも差がありますのでご注意ください．

例えば4.0ではutf-8やbinaryがcharacter setにサポートされておりません．  
MySQL 4.0の`/usr/share/mysql/charsets/Index`をご覧いただくと，正式にサポートされているcharacter
setが分かります．

```

    # sql/share/charsets/Index
    #
    # This file lists all of the available character sets.  Please keep this
    # file sorted by character set number.
    
    
    big5               1
    czech              2
    dec8               3
    dos                4
    german1            5
    hp8                6
    koi8_ru            7
    latin1             8
    latin2             9
    swe7              10
    usa7              11
    ujis              12
    sjis              13
    cp1251            14
    danish            15
    hebrew            16
    # The win1251 character set is deprecated.  Please use cp1251 instead.
    win1251           17
    tis620            18
    euc_kr            19
    estonia           20
    hungarian         21
    koi8_ukr          22
    win1251ukr        23
    gb2312            24
    greek             25
    win1250           26
    croat             27
    gbk               28
    cp1257            29
    latin5            30
    latin1_de         31
    
```

> [参考]
>
>   * ttp://dev.mysql.com/doc/refman/4.1/en/charset-unicode.html
>

また，CHAR型を宣言する時の長さの単位も変化しています．

MySQL 4.1以前では，`CHAR(30)`は30バイト分の長さを示していましたが，MySQL
4.1以降の`CHAR(30)`は30文字に意味が変わっています．
ちなみに1文字あたりのバイト数も，日本語は3バイトまでだったり4バイトまでだったり，MySQLのバージョンによって様々です．

> [参考]
>
>   * ttp://dev.mysql.com/doc/refman/4.1/en/char.html
>   * ttp://dev.mysql.com/doc/refman/4.1/en/charset-unicode-utf8.html
>   * ttp://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8.html
>

どちらも4.0と4.1の違いについてでしたが，4.0から5.xでも同様の問題は発生しうるのでコメントさせていただきました．
CC BY-SA 3.0
2014-12-16T06:50:18.363
1695
2014-12-16T06:50:18.363
2847
1597
answer