代码之家  ›  专栏  ›  技术社区  ›  TechFanDan

MySQL 5.6上utf8排序规则和字符集的部分配置

  •  0
  • TechFanDan  · 技术社区  · 10 年前

    我一直在尝试各种配置来强制字符集和排序规则到utf8。然而,我尝试的一切都失败了,一些设置反映了拉丁字符集或排序规则。

    这是IUS存储库中CentOS 6上的MySQL 5.6。

    我在/usr/share/mysql/My.cnf上的配置

    # The MySQL server
    [mysqld]
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    skip-external-locking
    key_buffer_size = 16K
    max_allowed_packet = 1M
    table_open_cache = 4
    sort_buffer_size = 64K
    read_buffer_size = 256K
    read_rnd_buffer_size = 256K
    net_buffer_length = 2K
    thread_stack = 128K
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    

    通过Heidi设置

    enter image description here

    从MySQL客户端

    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.01 sec)
    
    mysql> show variables like 'coll%';
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+
    3 rows in set (0.00 sec)
    

    但我在5.1中没有任何问题。

    更新#1

    我把 default-character-set = utf8 在里面 client , mysqld mysql 第节,共节 my.cnf 并重新启动MySQL服务。还是一样,拉丁语和utf8的混合。

    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
    mysql> show variables like 'coll%';
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+
    3 rows in set (0.00 sec)
    

    更新#2

    我的问题与通过MySQL Workbench使用迁移向导迁移数据库有关。生成的数据库包含我不需要的排序规则和字符集。如果我通过Heidi运行生成的脚本,我会得到与迁移结果相同的结果。

    2 回复  |  直到 10 年前
        1
  •  0
  •   Rick James diyism    10 年前

    init-connect 作为连接时被忽略 root (或其他 SUPER 用户)。

    在您的 my.cnf ( my.ini )文件,将其添加到 [mysql] [client] :

    default-character-set = utf8
    

    (我不知道海蒂是否会超越这一点——看看它是如何实现“连接”的。)

    附录

    character_set_database和_server不一定是问题_客户 联系 和_results用于表示字节 在客户端中 被编码。通过添加 CHARACTER SET utf8 在里面 CREATE TABLE .

    除了你给他们看的设置,你还有什么乱七八糟的文字症状?使用非英语文本的某些列执行此操作:

    SELECT col, HEX(col) FROM ... WHERE ...
    

    以显示实际存储的内容。

        2
  •  0
  •   TechFanDan    9 年前

    我最终对生成的脚本中所需的排序规则和字符集进行了硬编码。

    例如,在创建数据库和添加列时,在必要时指定排序规则和字符集,utf8_unicode_ci,utf8。。。