连接字符串中的 characterEncoding 是否设置值的存储方式?

Does characterEncoding in connection string set how values is stored?

我要将数据库的编码从 latin1 更改为 utf8mb4。 由于隐私限制,我不知道要转换的数据库包含什么。我担心 运行 到 SQL 以下,现有数据可能会被更改。

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

但是,来自 grails 应用程序的连接字符串包含 useUnicode=true&characterEncoding=UTF-8,这是否意味着即使 latin1_swedish_ci 用于列,已保存的实际值是 UTF-8 编码的吗?

并且由于此值是 UTF-8 编码的,因此数据不会因从 latin1 到 utf8mb4 的更改而受到影响吗?

+--------------------------+-------------------+
| 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              |
| collation_connection     | utf8_general_ci   |
| collation_database       | latin1_swedish_ci |
| collation_server         | latin1_swedish_ci |
+--------------------------+-------------------+```

那是Ώπα?这就是UTF-8(外界这么称呼它)、utf8mb4(MySQL的等价物)或utf8(MySQL的部分实现)中的解释UTF-8).

latin1 中效果不佳。

客户端中的编码和数据库中列的编码不必相同。然而,客户端中的 Greek 不能被塞入 table 中的 latin1,因此出现错误消息。

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 所做的是将 table 中的所有文本列更改为 utf8 编码 从当前使用的任何编码转换(大概是 latin1).这对于西欧字符来说很好,所有这些字符都存在于 latin1 和 utf8 中(具有不同的编码)。

要处理Emoji和一些中文,你还不如去utf8mb4:

ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_unicode_520_ci;