如何找出mysql字段级字符集?

问题描述 投票:0回答:1

我需要将表格的

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

mysql spring-boot jdbc character-encoding mysql-connector
1个回答
0
投票

给定列中字符串的字符集应与列定义相同。

曾出现过人们不小心将错误编码的字节存储在列中的情况。例如,它们将 latin1 编码的字节存储在 utf8 字段中。这是一个糟糕的想法,因为查询无法区分。这些字节可能不是列定义编码的有效值,这会导致垃圾数据。清理一些字符串以错误编码存储的表是一件令人不快的苦差事。

所以我强烈建议您根据列的定义只存储以兼容方式编码的字符串,并假设所有字符串都以这种方式存储。

© www.soinside.com 2019 - 2024. All rights reserved.