最近我们将mysql数据库从Latin1移到了UTF8.在尝试了几种不同的方法来转换它之后,我们无法找到任何不会引入一些非常令人讨厌的数据集(并且很多都没有做任何事情).
这让我想知道我们是否有很多不同的编码正在进行,因为似乎没有一种方法可以覆盖我们的测试用例(数据库中的各个帖子).为了测试这个理论,我写了一个小scala应用程序(我的第一个,随意取笑它是如何拼凑和非惯用的!:D)使用chardet查看帖子并告诉我编码.
只有一个问题,一切都是UTF8.
这是代码:
package main.scala
import org.mozilla.universalchardet.UniversalDetector
import java.sql.DriverManager
object DBConvert {
def main(args: Array[String]) {
val detector = new UniversalDetector(null)
val db_conn_str = "jdbc:mysql://localhost:3306/mt_pre?user=root"
val connection = DriverManager.getConnection(db_conn_str)
try {
val statement = connection.createStatement()
val rs = statement.executeQuery("SELECT * FROM mt_entry where entry_id = 3886")
while (rs.next) {
val buffer = rs.getBytes("entry_text_more")
detector.handleData(buffer, 0, buffer.length)
detector.dataEnd()
val encoding:String = detector.getDetectedCharset;
if (encoding != null) println("Detected encoding = " + encoding) else println("No encoding detected.");
detector.reset();
// Just so …Run Code Online (Sandbox Code Playgroud)