sql >> データベース >  >> RDS >> Mysql

MySql 5.7関数UUID()のデフォルトの照合-照合の不正な組み合わせ

    (これは実際には答えではありませんが、問題の原因と問題を解決する可能性のあるものを特定する試みです。)

    DATABASEにアクセスする まったく関係のないCHARACTER SET およびCOLLATION

    mysql> CREATE DATABASE `so40064402` /*!40100 DEFAULT CHARACTER SET ucs2 COLLATE ucs2_bin */
    mysql> USE so40064402;
    Database changed
    

    クライアントのutf8_polishを確立します:

    mysql> SET NAMES utf8 COLLATE utf8_polish_ci;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SHOW VARIABLES LIKE 'c%a%t%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       | -- from SET NAMES
    | character_set_connection | utf8                       | -- from SET NAMES
    | character_set_database   | ucs2                       | -- from DATABASE
    | character_set_filesystem | binary                     | -- (constant)
    | character_set_results    | utf8                       | -- from SET NAMES
    | character_set_server     | utf8mb4                    |
    | character_set_system     | utf8                       | -- (constant)
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    | collation_connection     | utf8_polish_ci             | -- from SET NAMES
    | collation_database       | ucs2_bin                   | -- from DATABASE
    | collation_server         | utf8mb4_unicode_520_ci     |
    +--------------------------+----------------------------+
    11 rows in set (0.00 sec)
    
    mysql> select charset(uuid()), collation(uuid());
    +-----------------+-------------------+
    | charset(uuid()) | collation(uuid()) |
    +-----------------+-------------------+
    | utf8            | utf8_general_ci   |  -- part of the problem, but can't fix this
    +-----------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> select replace(uuid(),'-','');
    ERROR 1270 (HY000): Illegal mix of collations
                     (utf8_general_ci,COERCIBLE),
                     (utf8_polish_ci,COERCIBLE),
                     (utf8_polish_ci,COERCIBLE) for operation 'replace'
    mysql> 
    mysql> 
    mysql> 
    mysql> SET NAMES utf8mb4 COLLATE utf8mb4_polish_ci;
    Query OK, 0 rows affected (0.00 sec)
    

    それでは、SET NAMESを変更しましょう それだけ。今それは動作します!?? UUID()にもかかわらず utf8であること !?

    mysql> SHOW VARIABLES LIKE 'c%a%t%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8mb4                    | -- from SET NAMES
    | character_set_connection | utf8mb4                    | -- from SET NAMES
    | character_set_database   | ucs2                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8mb4                    | -- from SET NAMES
    | character_set_server     | utf8mb4                    |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    | collation_connection     | utf8mb4_polish_ci          | -- from SET NAMES
    | collation_database       | ucs2_bin                   |
    | collation_server         | utf8mb4_unicode_520_ci     |
    +--------------------------+----------------------------+
    11 rows in set (0.00 sec)
    
    mysql> select replace(uuid(),'-','');
    +----------------------------------+
    | replace(uuid(),'-','')           |
    +----------------------------------+
    | ea841aacf83b11e8a66580fa5b3669ce |
    +----------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    


    1. MySQLAzureとJavaの接続

    2. バウンスされたメールアドレスをデータベースから自動的に削除しますか?

    3. sqliteデータベースの名前に従ってドローアブルから画像を取得し、リストビューで表示する方法

    4. MySQLの日付形式