首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL表包含latin1,但定义为UTF8,字符编码为地狱

问MySQL表包含latin1,但定义为UTF8,字符编码为地狱
EN

Server Fault用户
提问于 2011-10-22 20:12:25
回答 2查看 1.8K关注 0票数 1

我“继承”了osCommerce 2.2、PHP4和MySQL4设置,这给我带来了麻烦。问题是字符编码。虽然表被定义为包含UTF8,但它们实际上包含latin1。要将一些全新的东西混合到其中,似乎旧的编码器在建立到数据库的连接时通过设置SET CHARACTER SET 'utf8'手动地改变了这一点。

现在看起来是这样:

  • MySQL:UTF8,但实际上包含latin1。
  • PHP: MySQL-连接手动设置为UTF8。
  • HTML:以ISO-8859-1 (又名latin1 )的形式交付

这个设置直到一周前提供者更改了一些东西(他们实际上完全否认接触数据库或任何其他东西,但他们有服务器问题)。

有问题的部分是德语特殊字符öäüß的显示是正确的,但是当您想将它们插入数据库时,整个osCOmmerce会话就会中断,只有文本才会插入该字符。

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

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

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

EN

回答 2

Server Fault用户

回答已采纳

发布于 2011-10-22 21:06:08

当您更改另一个字符集中的数据时,必须首先将其更改为blob,然后更改为目标字符集(latin1)。如果不这样做,mysql将为您进行转换,而且您也不会这样做,因为您已经在latin1中获得了数据?

使用连接中的set chatacter set (即php)时,mysql会自动将表中的所有数据转换为连接的字符集。

票数 1
EN

Server Fault用户

发布于 2011-10-23 11:22:58

不优雅,但通常是有效的解决方案:

  1. 将整个数据库转储到SQL文件-检查文本文件中是否有正确的编码,
  2. 修正表的查询,以创建UTF-8表
  3. 检查数据库的设置-使用UTF-8
  4. 再次导入整个数据库
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/323966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档