• R
    Remove `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks` · 322068fe
    Ryuta Kamizono 提交于
    This reverts commit f6ca7e4e.
    
    The default collation of utf8 in MySQL is the `utf8_general_ci`, and
    this should not be changed. This is because, the better collation in the
    all locales is not exists, optimal collation in own application is not
    known other than themselves.
    
    The `utf8_unicode_ci` is known as Japanese killer in Japan, there are
    serious impacts in search of Japanese.
    
    MySQL implements the `utf8_unicode_ci` according to the Unicode
    Collation Algorithm (UCA) described at http://www.unicode.org/reports/tr10/,
    but the `utf8_unicode_ci` have only partial support for the UCA, only
    primary level key comparison implemented (also known as L1 (Base
    characters) comparison).
    
    Because L1 (Base characters) comparison does not distinguish between the
    presence or absence of the accent, if distinction of the accent is
    important there is a serious impact (e.g. Japanese).
    
    Example:
    
    ```
    > SHOW CREATE TABLE `dicts`\G
    *************************** 1. row ***************************
           Table: dicts
    Create Table: CREATE TABLE `dicts` (
      `word` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `meaning` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    1 row in set (0.00 sec)
    
    > INSERT INTO `dicts` VALUES ('ハハ', 'mother'), ('パパ', 'father');
    Query OK, 2 rows affected (0.00 sec)
    
    > SELECT * FROM `dicts` WHERE `word` = 'ハハ';
    +--------+---------+
    | word   | meaning |
    +--------+---------+
    | ハハ   | mother  |
    | パパ   | father  |
    +--------+---------+
    2 rows in set (0.00 sec)
    
    > CREATE UNIQUE INDEX `unique_index_word` ON `dicts`(`word`);
    ERROR 1062 (23000): Duplicate entry 'ハハ' for key 'unique_index_word'
    ```
    
    We should omit the collation entirely rather than providing a default.
    Then the choice is the responsibility of the server and MySQL distribution.
    322068fe
mysql_rake_test.rb 9.9 KB