mysql - 如何在一个实例中为数据库的多个字符集配置 my.cnf

标签 mysql character-encoding collation

在一个实例中,我有两个数据库: 第一个数据库 -> 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 |
+----------------------+-------------------+

当我们需要数据库的多种排序规则类型时,如何配置 my.cnf,即 我需要

my_db - 字符集 utf8 整理 utf8_unicode_ci。

Sample_db - 字符集 latin1 整理 latin1_swedish_ci。

使用上述配置,我面临一些问题,例如尝试将记录插入多个表(插入语句的第一个表除外)时表被锁定。其他查询太慢。我暂时更改了my_db -< em>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中:字符集-latin1,排序规则-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?连接到该数据库时是否需要始终提及?我问了很多问题,因为我很困惑并且害怕数据丢失..提前致谢。

最佳答案

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

客户端

你有什么客户? (我看到的只是mysql命令行工具。)可能客户端应该始终是utf8mb4(mysql字符集,相当于UTF-8的外界)。

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

列中的数据

每列都可以有一个CHARACTER SETCOLLATION。如果未指定,它们默认来自CREATE TABLE。如果未指定,则默认来自CREATE DATABASE。等等

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

客户端往返于列

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

推论:如果一个数据库是latin1,另一个数据库是utf8,则没有问题。

垃圾

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

关于mysql - 如何在一个实例中为数据库的多个字符集配置 my.cnf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45172893/

相关文章:

mysql - 我们可以在mysql数据库中创建多少个tablet?

PHP:有一个现有的二维数组并想从 mySQL 查询中添加另一列

C++如何检查字母是否是alpha(不是拉丁字母)

python - 在 Python 中获取 HTTP 响应的字符集/编码的好方法

MySQL - 最佳排序规则?

php - 获取mysql查询中所有匹配的数组?

mysql - 按交易日期从以前的交易中获取总项目数量并获取当前项目总数量

character-encoding - 使用一个字节表示 3 个整数?

sql - 什么是 SQL Server 对 MySQL 的 unicode_ci 排序规则的模拟?

php - 如何: Match string from search box and proper case table data