【问题标题】:Partial configuration of utf8 collations and charsets on MySQL 5.6MySQL 5.6 上 utf8 排序规则和字符集的部分配置
【发布时间】:2015-09-05 13:51:22
【问题描述】:

我一直在尝试各种配置来强制将字符集和排序规则转换为 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 设置

来自 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 放入my.cnfclientmysqldmysql 部分并重新启动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 运行生成的脚本,我会得到与迁移结果相同的结果。

【问题讨论】:

    标签: mysql utf-8 character-encoding


    【解决方案1】:

    当您以root(或其他SUPER 用户)身份连接时,init-connect 将被忽略。

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

    default-character-set = utf8
    

    (我不知道 Heidi 是否会覆盖它——看看它是如何“连接”的。)

    附录

    character_set_database 和 _server 不一定是问题。 _client、connection 和 _results 用于说明 client 中的字节是如何编码的。您可以通过在CREATE TABLE 中添加CHARACTER SET utf8 来说明表格包含的内容。

    除了像你展示的那样的设置,你有什么症状?对一些非英文文本的列执行此操作:

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

    显示实际存储的内容。

    【讨论】:

    • 我正在使用 Workbench 的迁移向导,它默认使用我不想要的排序规则和字符集。当我输出脚本时,它不显示任何硬编码的排序规则/字符集。如果我在 Heidi 中运行生成的脚本,我仍然会得到表的默认排序规则 latin_swedish_ci。
    【解决方案2】:

    我最终在生成的脚本中硬编码了我想要的排序规则和字符集。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 2015-07-13
      • 2023-03-17
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多