MySQL Table包含latin1,但被定义为UTF8,字符编码为地狱

我已经“inheritance”了一个osCommerce 2.2,PHP4和MySQL4的设置,这使得麻烦。 问题是字符编码。 虽然这些表被定义为包含UTF8但它们实际上包含latin1 。 为了将全新的东西混合在一起,看起来旧的编码器在连接到数据库时,通过设置SET CHARACTER SET 'utf8'手动改变了这个。

现在看起来像这样:

  • MySQL: UTF8但实际上包含latin1
  • PHP: MySQL-Connection手动设置为UTF8
  • HTML:作为ISO-8859-1又名latin1

这个设置一直工作到一个星期前,当提供商改变了一些东西 (他们实际上拒绝接触数据库或任何其他的东西,但他们有服务器问题)。

有问题的部分是德国特殊字符öäüß显示正确,但是当你想插入到数据库的整个osCOmmerce会话中断,只有文本,直到该字符被插入。

  • 要插入的文本: Das _ä_ ist ein Umlaut
  • 被保存的文本: Das _

当我build立连接时,通过将字符集设置为latin1来更改手动入侵的时候,每个插入都是正常的,但是数据库只传递? 而不是特殊字符。

我不知道如何解决这个问题,如果我将数据库列更改为latin1我失去了所有的特殊字符,如果我改变连接上的编码显示或插入失败。 我完全没有想法。

在更改另一个字符集中的数据时,必须先将其更改为blob,然后再更改为目标字符集(latin1)。 如果你不用mysql会为你做转换,你不会这样做,因为你已经得到了latin1中的数据?

AFAIK当你使用set连接(例如php)设置chatacter自动将表中的所有数据转换为连接的字符集。

不优雅,但通常工作的解决scheme

  1. 将整个数据库转储到SQL文件 – 检查文本文件中是否有正确的编码,
  2. 修复表的查询,以创buildUTF-8表
  3. 检查数据库的设置 – 使用UTF-8
  4. 再次导入整个数据库