Mysql 连接字符串中的字符编码是否设置了值的存储方式?
我要将数据库的编码从latin1更改为utf8mb4。 由于隐私限制,我不知道要转换的数据库包含什么。我担心在SQL下面运行,现有数据可能会被更改Mysql 连接字符串中的字符编码是否设置了值的存储方式?,mysql,grails,jdbc,character-encoding,Mysql,Grails,Jdbc,Character Encoding,我要将数据库的编码从latin1更改为utf8mb4。 由于隐私限制,我不知道要转换的数据库包含什么。我担心在SQL下面运行,现有数据可能会被更改 ALTER TABLE TABLE转换为字符集utf8 COLLATE utf8\u general\u ci 但是,grails应用程序中的连接字符串包含useUnicode=true&characterEncoding=UTF-8,这是否意味着即使列使用latin1_swedish_ci,保存的实际值也是UTF-8编码的 由于该值是UTF-8编码
ALTER TABLE TABLE转换为字符集utf8 COLLATE utf8\u general\u 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
中无法正常工作
客户机中的编码和数据库中列的编码不必相同。但是,不能将客户机中的希腊语填充到表中的拉丁语1中,因此会显示错误消息
什么ALTER TABLE TABLE转换为字符集utf8 COLLATE utf8\u general\u ci
的作用是将该表中的所有文本列更改为utf8编码,并从当前使用的任何编码(大概是拉丁语1)转换。这适用于西欧字符,所有这些字符(使用不同的编码)都有拉丁文1和utf8
要处理表情符号和一些中文,您最好选择utf8mb4
:
ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_unicode_520_ci;
“这是否意味着即使拉丁语1_-swedish_ci用于列,已保存的实际值也是UTF-8编码的?”-不。有很多这样的问题,当列字符集为拉丁语1(或类似字符集)时,为什么像
πα
这样的值会作为?
存储在数据库中。连接字符串参数告诉服务器发送的字符串是Unicode(编码为UTF-8),但拉丁1字符集不包括这些字符,因此在将这些字符写入列时,它们会转换为问号。感谢您的回答。当尝试通过应用程序接口插入latin1不支持的字符时,应用程序返回一条错误消息,说明“字符串值不正确:'\xCE\x8F\xCF\x80\xCE\xB1”。这让我更加确信,latin1不支持的字符永远不会作为问号出现在数据库中。这会改变你回答的问题的答案吗?关键点是一样的:如果一个列被定义为latin1,那么它将只包含latin1编码的字符串。将列从latin1转换为utf8mb4可能会更改字符串的编码,但不会更改其值,例如,“André”将保留为“André”,即使“é”的编码不同。谢谢!在转换之前尝试写入所有可能的字符,并且可以成功转换而不会损坏数据