Swisscom Cloud 中 mariadb 中的默认服务器字符集是什么?如何更改?
What is the default server characterset in mariadb inside the Swisscom Cloud and how can it be changed?
这是关于 Swisscom Cloud MariaDB 服务的澄清请求。这与通用 MariaDB default charactersets 无关。
- 我想知道 Swisscom Cloud 上 MariaDB 服务的默认
character_set_server
定义是什么。
- 假设它实际上是
latin1
,我想知道是否可以更改此默认值(更改为 utf-8
或更准确地说 utf8mb4
,因为它是 debian mariadb package
).
我提出这个问题的主要原因是我在创建可以轻松重新导入的备份时遇到了问题,并且通过 mysqldump ... -r backup.sql
与通过 Sequel Pro
.
导出
我不使用工具 Sequel Pro
。
遗留 MariaDB/Galera 集群在您未设置时使用 latin1
作为默认字符集。此默认设置来自上游 MariaDB 开发人员。大多数开发人员和 DBA 不喜欢这个决定。
这是 CREATE TABLE
语法(参见 COLLATE
和 CHARACTER SET
):
CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
服务器设置(此语句每个客户都可以执行,不需要管理员权限):
MariaDB [(none)]> show global variables like 'character_set%';
+--------------------------+-------------------------------------+
| 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 | /usr/share/mariadb-galera/charsets/ |
+--------------------------+-------------------------------------+
8 rows in set (0.00 sec)
如果您还在使用遗留的 MariaDB,请快点 migrate your service instance。遗留集群将在一两天内处于只读状态。
We have a completely new MariaDB service in store for you. It comes
with many improvements (e.g. MariaDB version 10) and we recommend to
upgrade as soon as possible.
本分步指南创建于 Aug 16, 2017。
新集群使用更好的默认设置:
MariaDB [(none)]> show global variables like 'character_set%';
+--------------------------+------------------------------------------------------------------------------------------+
| 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 | /var/vcap/data/packages/mariadb/95a1896c4bcdccb4e1abd81b7d00eb33aedb0da0/share/charsets/ |
+--------------------------+------------------------------------------------------------------------------------------+
8 rows in set (0.01 sec)
如果您希望在将数据导入新集群之前更改字符集和排序规则。
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
我们这样做了很多次。请记住,您不应对超过 20000 条记录执行此操作。
也请看看我们的documentation for MariaDB
Please contact Swisscom Application Cloud support when you need to
issue long running DDL changes (for example ALTER TABLE
with thousends
of records). Long running DDL causes an outage for all customers on
the cluster.
这是为了演示两种不同ALTERs
;一个无所作为;一个做你想做的事:
-- 试试 'wrong' ALTER:
DROP TABLE IF EXISTS atc;
CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
INSERT INTO atc (c) VALUES ('ÃÔäô');
SHOW CREATE TABLE atc\G
SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
ALTER TABLE atc CHARACTER SET utf8;
SHOW CREATE TABLE atc\G -- the column stays latin1, overriding the table
SELECT c, HEX(c) FROM atc; -- still latin1 encoding
mysql>
mysql> -- Try the 'wrong' ALTER:
mysql>
mysql> DROP TABLE IF EXISTS atc;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO atc (c) VALUES ('ÃÔäô');
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE TABLE atc\G
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
mysql> ALTER TABLE atc CHARACTER SET utf8;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE atc\G -- the column stays latin1, overriding the table
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- still latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
-- 尝试 'right' 方式:
DROP TABLE IF EXISTS atc;
CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
INSERT INTO atc (c) VALUES ('ÃÔäô');
SHOW CREATE TABLE atc\G
SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
ALTER TABLE atc CONVERT TO CHARACTER SET utf8;
SHOW CREATE TABLE atc\G -- column and table are utf8
SELECT c, HEX(c) FROM atc; -- now utf8
mysql>
mysql> -- Try the 'right' way:
mysql>
mysql> DROP TABLE IF EXISTS atc;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO atc (c) VALUES ('ÃÔäô');
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE TABLE atc\G
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
mysql> ALTER TABLE atc CONVERT TO CHARACTER SET utf8;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE atc\G -- column and table are utf8
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- now utf8
+----------+------------------+
| c | HEX(c) |
+----------+------------------+
| ÃÔäô | C383C394C3A4C3B4 |
+----------+------------------+
1 row in set (0.00 sec)
mysql>
这是关于 Swisscom Cloud MariaDB 服务的澄清请求。这与通用 MariaDB default charactersets 无关。
- 我想知道 Swisscom Cloud 上 MariaDB 服务的默认
character_set_server
定义是什么。 - 假设它实际上是
latin1
,我想知道是否可以更改此默认值(更改为utf-8
或更准确地说utf8mb4
,因为它是debian mariadb package
).
我提出这个问题的主要原因是我在创建可以轻松重新导入的备份时遇到了问题,并且通过 mysqldump ... -r backup.sql
与通过 Sequel Pro
.
我不使用工具 Sequel Pro
。
遗留 MariaDB/Galera 集群在您未设置时使用 latin1
作为默认字符集。此默认设置来自上游 MariaDB 开发人员。大多数开发人员和 DBA 不喜欢这个决定。
这是 CREATE TABLE
语法(参见 COLLATE
和 CHARACTER SET
):
CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
服务器设置(此语句每个客户都可以执行,不需要管理员权限):
MariaDB [(none)]> show global variables like 'character_set%';
+--------------------------+-------------------------------------+
| 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 | /usr/share/mariadb-galera/charsets/ |
+--------------------------+-------------------------------------+
8 rows in set (0.00 sec)
如果您还在使用遗留的 MariaDB,请快点 migrate your service instance。遗留集群将在一两天内处于只读状态。
We have a completely new MariaDB service in store for you. It comes with many improvements (e.g. MariaDB version 10) and we recommend to upgrade as soon as possible.
本分步指南创建于 Aug 16, 2017。
新集群使用更好的默认设置:
MariaDB [(none)]> show global variables like 'character_set%';
+--------------------------+------------------------------------------------------------------------------------------+
| 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 | /var/vcap/data/packages/mariadb/95a1896c4bcdccb4e1abd81b7d00eb33aedb0da0/share/charsets/ |
+--------------------------+------------------------------------------------------------------------------------------+
8 rows in set (0.01 sec)
如果您希望在将数据导入新集群之前更改字符集和排序规则。
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
我们这样做了很多次。请记住,您不应对超过 20000 条记录执行此操作。
也请看看我们的documentation for MariaDB
Please contact Swisscom Application Cloud support when you need to issue long running DDL changes (for example
ALTER TABLE
with thousends of records). Long running DDL causes an outage for all customers on the cluster.
这是为了演示两种不同ALTERs
;一个无所作为;一个做你想做的事:
-- 试试 'wrong' ALTER:
DROP TABLE IF EXISTS atc;
CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
INSERT INTO atc (c) VALUES ('ÃÔäô');
SHOW CREATE TABLE atc\G
SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
ALTER TABLE atc CHARACTER SET utf8;
SHOW CREATE TABLE atc\G -- the column stays latin1, overriding the table
SELECT c, HEX(c) FROM atc; -- still latin1 encoding
mysql>
mysql> -- Try the 'wrong' ALTER:
mysql>
mysql> DROP TABLE IF EXISTS atc;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO atc (c) VALUES ('ÃÔäô');
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE TABLE atc\G
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
mysql> ALTER TABLE atc CHARACTER SET utf8;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE atc\G -- the column stays latin1, overriding the table
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- still latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
-- 尝试 'right' 方式:
DROP TABLE IF EXISTS atc;
CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
INSERT INTO atc (c) VALUES ('ÃÔäô');
SHOW CREATE TABLE atc\G
SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
ALTER TABLE atc CONVERT TO CHARACTER SET utf8;
SHOW CREATE TABLE atc\G -- column and table are utf8
SELECT c, HEX(c) FROM atc; -- now utf8
mysql>
mysql> -- Try the 'right' way:
mysql>
mysql> DROP TABLE IF EXISTS atc;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE atc ( c VARCHAR(11)) CHARACTER SET latin1 ;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO atc (c) VALUES ('ÃÔäô');
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE TABLE atc\G
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- note the latin1 encoding
+----------+----------+
| c | HEX(c) |
+----------+----------+
| ÃÔäô | C3D4E4F4 |
+----------+----------+
1 row in set (0.00 sec)
mysql> ALTER TABLE atc CONVERT TO CHARACTER SET utf8;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE atc\G -- column and table are utf8
*************************** 1. row ***************************
Table: atc
Create Table: CREATE TABLE `atc` (
`c` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SELECT c, HEX(c) FROM atc; -- now utf8
+----------+------------------+
| c | HEX(c) |
+----------+------------------+
| ÃÔäô | C383C394C3A4C3B4 |
+----------+------------------+
1 row in set (0.00 sec)
mysql>