我将承担将数据库从Latin1转换为UTF-8的繁琐而棘手的任务。
在这一点上,我只想检查存储在表中的数据类型,因为这将确定我应使用哪种方法转换数据。
具体来说,我想检查Latin1列中是否有UTF-8字符,什么是最好的方法?如果只影响几行,那么我可以手动修复它。
选项1.执行MySQL转储并使用Perl搜索UTF-8字符吗?
选项2。使用MySQL CHAR_LENGTH查找具有多字节字符的行吗?例如,SELECT name FROM clients WHERE LENGTH(name) != CHAR_LENGTH(name);
难道这还不够?
目前,我已将Mysql客户端编码转换为UTF-8。
像时区一样,字符编码一直是问题的根源。
您可以做的是查找任何“高ASCII”字符,因为这些字符可能是LATIN1重音字符或符号,也可能是UTF-8多字节字符的第一个。除非您作弊,否则要说出区别并不容易。
为了弄清楚哪种编码是正确的,您只需使用SELECT
两个不同的版本并进行直观比较。这是一个例子:
SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1,
CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8
FROM users
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')
这使得异常复杂,因为MySQL正则表达式引擎似乎忽略了类似的事情\x80
,因此有必要使用该UNHEX()
方法。
这样会产生如下结果:
latin1 utf8
----------------------------------------
Björn Björn
我有一个jsp文件,在那里我收集表单值,并通过jQuery Ajax将其发送到strut 2 action class。 我的Ajax函数看起来像 当我解码并提醒它的文本我正确编码和解码。 当我通过ajax将其发送到struts2时,它会产生问题。 我已经检查了Interceptor中的值它显示值??????? 拦截器 在我的jsp文件中,我将内容类型设置为UTF-8,在ajax中,我也检查了内容
问题内容: 在工作中,似乎没有一周没有编码相关的混乱,灾难或灾难。问题通常来自程序员,他们认为他们无需指定编码就可以可靠地处理“文本”文件。但是你不能。 因此,已决定从此以后禁止文件以或结尾的文件名。他们的想法是,这些扩展使临时程序员误以为对编码不满意,这会导致处理不当。根本没有扩展将是更好的选择,因为至少您 知道 自己不知道拥有什么。 但是,我们不会走那么远。相反,您将期望使用以编码结尾的文件名
问题内容: 我遇到了这行遗留代码,我试图找出这些遗留代码: 据我了解,它是使用相同的charSet进行编码和解码。 这与以下内容有何不同? 在任何情况下,两条生产线的输出将不同? ps:只是要澄清一下,是的,我知道Joel Spolsky撰写的关于编码 的出色文章! 问题答案: 这可能是很复杂的方式 这缩短了String,而所使用的基础char []则更长。 但是,更具体地说,将检查每个字符是否都
问题内容: 在对CSV文件进行编码的假设下运行了以前的文件。在此导入过程中,将多字节字符解释为两个单个字符,然后再次使用utf-8进行编码。 这种双重编码会产生类似的异常,而不是。 如何更正这些字符串? 问题答案: 下面的MySQL函数在双重编码后将返回正确的utf8字符串: 它可以与语句一起使用以更正字段:
问题内容: iconv函数有时会给我一个错误: 有没有办法在将数据放入inconv之前检测到utf-8字符串中存在非法字符? 问题答案: 首先,请注意,无法检测文本是否属于特定的不需要的编码。您只能检查字符串在给定编码中是否有效。 您可以使用从PHP 4.3.5 开始在 可用的UTF-8有效性检查。如果给出了无效的字符串,它将返回(没有其他信息): 另一种可能是[ 您可以使用的另一个功能是[ 将参
问题内容: 我有一个来自第三方站点的提要,有时我必须申请和其他时间才能获得所需的可见输出。 如果错误地将相同的内容应用两次/或者使用了错误的方法,我会变得更加难看,这就是我要更改的内容。 如何检测什么时候需要在字符串上应用? 实际上,内容返回的是UTF-8,但是内部有一些不是。 问题答案: 我不能说我可以依靠。我前段时间有一些怪异的误报。 我发现在每种情况下都能正常工作的最普遍方式是: