我需要将表格的
latin1
字符集转换为utf8
.
引用自mysql文档:
CONVERT TO 操作在原始字符集和命名字符集之间转换列值。如果您在一个字符集(如 latin1)中有一列,这不是您想要的,但存储的值实际上使用其他一些不兼容的字符集(如 utf8mb4)。在这种情况下,您必须为每个这样的列执行以下操作:
更改表 t1 更改 c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8mb4;
这个答案展示了如何在数据库级别、表级别和列级别查找字符集。但我需要找出实际存储值的字符集。我该怎么做?
由于我的connector/j jdbc连接字符串没有指定任何
characterEncoding
或connectionCollation
属性,它可能默认使用utf8来存储值,在这种情况下我不需要任何转换,只需更改表元数据。
mysql-connector-java
版本:8.0.22
mysql数据库版本:5.6
spring boot 版本:2.5.x
给定列中字符串的字符集应与列定义相同。
曾出现过人们不小心将错误编码的字节存储在列中的情况。例如,它们将 latin1 编码的字节存储在 utf8 字段中。这是一个糟糕的想法,因为查询无法区分。这些字节可能不是列定义编码的有效值,这会导致垃圾数据。清理一些字符串以错误编码存储的表是一件令人不快的苦差事。
所以我强烈建议您根据列的定义只存储以兼容方式编码的字符串,并假设所有字符串都以这种方式存储。