在一个实例中,我有两个数据库: 第一个数据库 -> 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 collate latin1_swedish_ci,现在工作正常。 但我的要求不是这个。
对于 my_db 表和列:字符集 - Utf8、collation-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 SET
和COLLATION
。如果未指定,它们默认来自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/