如何将mysql latin1转换为utf8

如何将mysql latin1转换为utf8,mysql,utf-8,character-encoding,iso-8859-1,Mysql,Utf 8,Character Encoding,Iso 8859 1,我继承了一个需要进一步开发的web系统。 这个系统似乎是由一个人创建的,他阅读了PHP教程的两章,认为他可以编写 所以。。。网页本身是UTF8格式的,显示并输入其中的所有内容。数据库表已使用UTF8字符集创建。但是,在配置中,有“SET NAMES LATIN1”。换句话说,UTF8编码的字符串使用强制拉丁1编码填充到数据库中 有没有办法把这些乱七八糟的东西转换成utf8格式并去掉拉丁语 我试过了,但是由于数据库表被设置为utf8,所以这不起作用。也尝试过,但没有成功 我可能可以通过使用拉丁文1

我继承了一个需要进一步开发的web系统。 这个系统似乎是由一个人创建的,他阅读了PHP教程的两章,认为他可以编写

所以。。。网页本身是UTF8格式的,显示并输入其中的所有内容。数据库表已使用UTF8字符集创建。但是,在配置中,有“SET NAMES LATIN1”。换句话说,UTF8编码的字符串使用强制拉丁1编码填充到数据库中

有没有办法把这些乱七八糟的东西转换成utf8格式并去掉拉丁语

我试过了,但是由于数据库表被设置为utf8,所以这不起作用。也尝试过,但没有成功


我可能可以通过使用拉丁文1编码读取PHP中的所有表,然后用utf8将它们写回一个新的数据库来实现这一点,但如果可能的话,我想避免这种情况。

情况并没有你想象的那么糟,除非你已经有很多非罗马字符(即,拉丁文1中无法表示的字符)您的数据库中已存在。拉丁语-1是utf8的适当子集。您的web应用程序使用utf8,表的内容也使用utf8。因此,不需要转换表

因此,尝试将
集合名称拉丁1
更改为
集合名称utf8
。通过允许php程序的连接使用与连接两端的代码相同的字符集,它可能会解决您的问题


读这个

我通过在如下文本字段上运行更新来解决这个问题:

UPDATE table SET title = CONVERT(CONVERT(CONVERT(title USING latin1) USING binary) USING UTF8)

更改列数据类型

VARBINARY 它会自动转换拉丁1数据

谢谢你们。
我希望这会有所帮助。

数据库中包含大量匈牙利语字符串,带有拉丁语无法表示的重音。该页面使用SET NAME latin1,如果我将其更改为SET NAME utf8,则会产生混乱。我需要导入一个包含匈牙利每个城市名称的新表。它是在正确的UTF8,所以如果我访问数据库作为拉丁1它会搞砸这一点。因此,我要么将当前DB转换为正确的UTF8,要么将城市列表转换为强制拉丁语1。我更喜欢前者。我在DB中尝试过,但它会在第一个umlaut或特殊字符的位置切断所有字符串。有没有正确的方法?如果您的字段在表中混合了正确的UTF8条目,那么这些列将失败,并出现错误“无效UTF8字符串”。您可以逐行更新并跳过引发此错误的行。我通过添加
IGNORE
子句解决了1300错误。但这会导致文本被截断,例如
。Felicidades
将变成
Felicidades
。基本上,这个字符串已经是UTF8,转换成拉丁文1返回UTF8会导致数据丢失。如果原始字节更改为
HEX(转换(标题使用拉丁文1))=HEX(转换(转换(转换(标题使用拉丁文1)使用二进制)使用utf8)),则可以添加以下条件跳过这些行。