jjzjj

mysql - 将 UTF8 和 Latin1 表中的 iso-8859-1 数据转换为 UTF-8

coder 2023-10-15 原文

问题总结:

在尝试将带有 mysql 数据库的站点从 latin1 转换为 utf8 时,尽管确保字符集均为 utf8 系统范围,但一些特殊字符仍未正确显示。

问题详情:

这是一个常见问题。但我似乎增加了复杂性。

多年前,一个健忘的开发人员(我)将一个站点与 MySQL 放在一起。有些表是用 latin1_swedish_ci 和 utf8_general_ci 设置的。所有输入/显示都是通过带有 iso-8859-1 字符集的页面完成的。

现在,我的任务是将所有这些数据转换为 utf-8,从而最终统一编码。但是,我在这两种情况下都遇到了一些特殊字符的问题(即:ü)。这些字符似乎无法在 UTF-8 页面上正确显示。它们显示为 .Instead 当在 mysql 查询浏览器中查看 utf8 表中的数据时,正确输入的 utf8'd 'u' 显示为一些特殊字符,而错误的 latin1 'u' 显示为它应该出现在页面上。但事实并非如此。

我已经尝试了很多事情:

  1. Percona 脚本:https://github.com/rlowe/mysql_convert_charset
  2. 将 col 转换为二进制,然后转换为 utf8
  3. 将utf8表转换为latin,然后重复上述过程

似乎没有什么可以治愈数据。

转储整个数据库和 important 并不是一个真正可行的选择,因为它现在是一个庞大的数据库并且停机时间受到限制。

更新(2013 年 10 月 22 日)

我采纳了@deceze 的建议并根据 http://kunststube.net/frontback/ 审查了我所有的内容编码区域.我确实找到了几个地方,我仍然在 latin1 中传递/编码数据。所以,我现在将其全部更改为 UTF-8。但是,数据在特定字段中仍然显示不正确。在 utf8 的表中(没有列具有隐式编码),field1 在 latin1 中。我可以通过运行以下正确显示文本的命令来确认这一点:

select convert(cast(convert(field1 using latin1) as binary) using utf8) from my table WHERE id = 1

这会将 Hahnemühle 转换为 Hahnemühle。

在 field2 中,数据似乎采用不同的(未知)编码。上面的查询在 field2 上使用时会将 Hahnem�hle 转换为 Hahnem�hle。我已经浏览了 http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html 上的所有字符集。更换 latin1 但似乎没有人正确吐出数据。

最佳答案

将列设置为 latin1 并将其他列设置为 utf8 在 MySQL 中完全没问题。这里没有问题需要解决。此字符集参数仅影响数据在内部的存储方式。这当然也意味着您不能在 latin1 列中存储例如“汉字”。但假设您只是在其中存储“Latin-1 字符”,那很好。

MySQL 有一种通常称为连接编码 的东西。它告诉 MySQL 您从 PHP(或其他地方)发送给它的编码文本是什么,以及当从 MySQL 检索数据时您想要返回什么编码。列字符集、“输入连接编码”和“输出连接编码”都可以是不同的东西,MySQL 会根据需要动态地转换编码。

因此,假设到目前为止您已经使用了正确的连接编码并且数据已正确存储在您的数据库中并且您没有尝试将非 Latin-1 字符存储在 Latin-1 列中,您需要做的就是将您的列字符集更新为 UTF-8 是:

ALTER TABLE table MODIFY column TEXT [...] CHARACTER SET utf8;

关于mysql - 将 UTF8 和 Latin1 表中的 iso-8859-1 数据转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497066/

有关mysql - 将 UTF8 和 Latin1 表中的 iso-8859-1 数据转换为 UTF-8的更多相关文章

  1. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  4. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  5. ruby-on-rails - Rails 导入 CSV 错误 : invalid byte sequence in UTF-8 - 2

    尝试在我的Rails应用程序中导入CSV文件时,出现错误UTF-8中的无效字节序列。一切正常,直到我添加了一个gsub方法来将其中一个CSV列与我的数据库中的一个字段进行比较。当我导入CSV文件时,我想检查每一行的地址是否包含在特定客户端的不同地址数组中。我有一个带有alt_addresses属性的客户端模型,其中包含客户端地址的几种不同可能格式。然后我有一个引用模型(如果您熟悉本地SEO,您就会知道这个术语)。引用模型没有地址字段,但它有一个nap_correct?字段(NAP代表“姓名”、“地址”、“电话号码”)。如果CSV行的名称、地址和电话号码与我在该客户的数据库中拥有的相同,

  6. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  7. ruby-on-rails - 如何防止错误 "code converter not found (UTF-8)"? - 2

    我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(

  8. Ruby:模糊测试所有 unicode 字符(UTF8/编码/字符串操作) - 2

    我无法遍历整个unicode字符范围。我到处找...我正在构建一个模糊器,并希望将所有unicode字符(一次一个)嵌入到一个url中。例如:http://www.example.com?a=\uff1c我知道有一些内置工具,但我需要更多的灵active。如果我能像下面那样做:"\u"+"ff1c"那就太好了。这是我得到的最接近的:char="\u0000"...#withiniterationchar.succ!...但在字符"\u0039"之后,即数字9,我将得到"10"而不是":" 最佳答案 您可以使用pack将数字转换为UT

  9. ruby , `match' : invalid byte sequence in UTF-8 - 2

    我对UTF-8编码有一些问题。我在这里阅读了一些帖子,但它仍然无法正常工作。这是我的代码:#!/bin/envruby#encoding:utf-8defdeterminefile=File.open("/home/lala.txt")file.eachdo|line|puts(line)type=line.match(/DOG/)puts('aaaaa')iftype!=nilputs(type[0])breakendendend这是我文件的前3行:;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en

  10. ruby - ruby 中是否有针对 ISO 8601 的综合库/模块? - 2

    是否已经实现了ISO8601的所有日期、时间、持续时间和间隔使用情况?ruby标准?我的意思是类似于类的东西,您可以在其中设置和获取详细信息,例如年、月、日、星期几、星期、小时、分钟、is_duration?、has_recurrence?等等也可以设置并导出到字符串? 最佳答案 require'time'time=Time.iso8601Time.now.iso8601#iso8601stringtime.year#=>Yearofthedatetime.month#=>Monthofthedate(1to12)time.day#

随机推荐