我将数据库的编码从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 |
+--------------------------+-------------------+```
答案 0 :(得分:1)
那是Ώπα
吗?这就是UTF-8
(外界称之为),utf8mb4
(相当于MySQL)或utf8
(MySQL对UTF-8的部分实现)中的解释。
在latin1
中无法正常工作。
客户端中的编码和数据库中的列的编码不必相同。但是,客户端中的希腊语无法塞入表中的latin1中,因此会出现错误消息。
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
所做的是将表中的所有文本列更改为utf8编码的,并且从当前使用的任何编码方式转换(大概是latin1)。这对于西欧字符来说很好,在latin1和utf8中都存在(使用不同的编码)。
要处理表情符号和一些中文,不妨使用utf8mb4
:
ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_unicode_520_ci;