【问题标题】:How to configure my.cnf for multiple CHARACTER SET of database in one instance如何在一个实例中为数据库的多个字符集配置 my.cnf
【发布时间】:2017-12-23 16:22:42
【问题描述】:

在一个实例中,我有两个数据库: 第一个数据库 -> my_db 第二个数据库 -> sample_db

mysql> show global variables like 'char%';

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | latin1                                    |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

mysql> show global variables like 'coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

mysql> use my_db;

SHOW CREATE DATABASE my_db ;
+-------------------+-------------------------------------------------------------------------------------------+
| Database          | Create Database                                                                       
+-------------------+-------------------------------------------------------------------------------------------+
| plum_production_1 | CREATE DATABASE `my_db` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */    |
+-------------------+-------------------------------------------------------------------------------------------+

第一个数据库; my_db

mysql> show variables like '%coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | utf8_unicode_ci   |
| collation_server     | utf8_unicode_ci   |
+----------------------+-------------------+

mysql> show variables like '%char%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

第二个数据库:

mysql> use sample_db;

mysql> show create database sample_db;
+-----------------+----------------------------------------------------------------------------+
| Database        | Create Database                                                            
|
+-----------------+----------------------------------------------------------------------------+
| plum_production | CREATE DATABASE `plum_production` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+-----------------+----------------------------------------------------------------------------+

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       | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

mysql> show variables like '%coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

当我们需要多种排序类型的 db 时如何配置 my.cnf,即 我需要

my_db - character_set utf8 collat​​e utf8_unicode_ci.

Sample_db - character_set latin1 collat​​e latin1_swedish_ci.

使用上述配置,我面临一些问题,例如在尝试将记录插入到除插入语句的第一个表之外的多个表中时表被锁定。其他查询太慢。我暂时更改了 my_db -character_set latin1 collat​​e latin1_swedish_ci,现在它工作正常。 但我的要求不是这个。

对于 my_db 表和列:字符集-Utf8,collat​​ion-utf8_unicode_ci --> 为了完成这项工作,我进行了更改

数据库:- 更改数据库 my_db 字符集 utf8 整理 utf8_unicode_ci,

表格:- 对于所有表格 - ALTER TABLE table_names CHARACTER SET utf8 COLLATE utf8_unicode_ci;

转换所有列:- ALTER TABLE table_names CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 我的方法是否正确?。除了 my.cnf 之外,还有什么要改变的吗?

sample_db中:Charcter set-latin1,collat​​ion-latin_swedish_ci.

我们使用 awsrds my.cnf 看起来像这样:-

[mysqld]
character_set_client: utf8
character_set_database: utf8
character_set_results: utf8
character_set_connection: utf8
character_set_server: utf8
collation_connection: utf8_unicode_ci
collation_server: utf8_unicode_ci

以及如何配置本地实例 my.cnf(不在 aws 中)?例如:

[client]
[mysql]
[mysqld]

连接时如何设置名称 utf8_mb4?连接到该数据库时是否需要始终提及?我问了很多问题,因为我很困惑,害怕数据丢失..提前谢谢。

【问题讨论】:

    标签: mysql character-encoding collation


    【解决方案1】:

    my.cnf 主要是可以覆盖的默认值。如果您有混合物,请不要担心;专注于其他设置。

    客户

    你有什么客户? (我看到的都是mysql命令行工具。)可能client应该永远是utf8mb4(mysql字符集,相当于外面的UTF-8)。

    连接时,使用连接参数建立CHARACTER SET utf8mb4,可能通过SET NAMES utf8m4;来建立

    列中的数据

    每列可以有一个CHARACTER SETCOLLATION。如果未指定,则默认为 CREATE TABLE。如果未指定,则默认为 CREATE DATABASE。等等。

    因此,请确保每一列都是它们需要的方式。使用SHOW CREATE TABLE进行验证。

    客户端到/从列

    MySQL 在客户端和服务器之间传输数据时对其进行转码。因此,可以让客户端使用utf8mb4,但INSERTing/SELECTing 声明为latin1 的列。 (某些组合不起作用。)

    推论:如果一个 DB 是 latin1 而另一个是 utf8,则没有问题。

    垃圾

    请参阅 http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored 中的“最佳实践”。如果您出现乱码,请参阅该链接以进行进一步的调试/修复。

    【讨论】:

    • 服务器初始化在[mysqld]下进行。我更喜欢在客户端中显式地做客户端的事情(而不是 my.cnf,有些客户端不看)。
    • 我的问题没有解决@Rick James。我还需要更改 information_schema 排序规则吗?
    • 您不能直接更改information_schema 中的任何内容。请为所涉及的两个表中的每一个提供SHOW CREATE TABLE,以及将数据从一个表复制到另一个表的 SQL。并详细说明“未解决”。
    • 请检查上述问题。
    • 我很困惑;你要我检查什么?
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 2019-02-14
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多