我“继承”了 osCommerce 2.2、PHP4 和 MySQL4 设置,这会带来麻烦。问题在于字符编码。虽然表定义为包含,但UTF8
它们实际上包含latin1
。为了将全新的东西混入其中,似乎老程序员通过设置SET CHARACTER SET 'utf8'
何时建立与数据库的连接来手动更改了这一点。
现在看起来像这样:
- MySQL的:
UTF8
但实际上包含latin1
。 - PHP的:MySQL-Connection 手动设置为
UTF8
。 - HTML:
ISO-8859-1
以aka形式交付latin1
这种设置一直有效,直到一周前供应商更换某物(他们实际上否认接触过数据库或任何其他东西,但他们的服务器出现了问题)。
问题在于德语特殊字符öäüß
显示正确,但是当您想将它们插入数据库时,整个 osCOmmerce 会话就会中断,只显示插入该字符之前的文本。
- 要插入的文字:
Das _ä_ ist ein Umlaut
- 保存的文本:
Das _
当我通过将字符集设置为latin1
在建立连接时来更改手动入侵时,每次插入都没有问题,但数据库只会传递?
特殊字符。
我不知道如何解决这个问题,如果我将数据库列更改为,latin1
我会丢失所有特殊字符,如果我更改连接上的编码,则显示或插入都会失败。我完全没有主意了。
答案1
当您更改其他字符集中的数据时,您必须先将其更改为 blob,然后再更改为目标字符集 (latin1)。如果您不这样做,mysql 将为您进行转换,而您不想这样做,因为您已经获得了 latin1 中的数据?
据我所知,当您在连接(即 php)中使用设置字符集时,mysql 会自动将表中的所有数据转换为连接的字符集。
答案2
虽然不太优雅,但通常可以解决问题:
- 将整个数据库转储到 SQL 文件 - 检查文本文件中是否有正确的编码,
- 修复表查询,创建 UTF-8 表
- 检查数据库的设置 - 使用 UTF-8
- 再次导入整个数据库