【问题标题】:How to convert this special sign in MySQL?如何在 MySQL 中转换这个特殊符号?
【发布时间】:2015-08-08 05:13:01
【问题描述】:

我在 MySQL 数据库中保存了包含符号 – 的字符串。我想将其转换为正确的符号 -。你知道什么是最简单的方法吗?

【问题讨论】:

  • 您使用什么语言将其发送到 mySql?是Java ..?你的 mysql 编码设置是什么?参考本指南:stackoverflow.com/questions/10113355/…
  • PHP。我通过 PHP 尝试了基本的 REPLACE(),但到目前为止还没有成功。 MySQL 无法识别这些符号。
  • replace 将不起作用,但您需要在响应发送到 mysql 之前为响应设置正确的编码。如果您参考我提供的链接,它有几种解决方案,您可以尝试使用 PHP 以及如何在 mysql 中设置排序规则。再次:stackoverflow.com/questions/10113355/…
  • 这会将查询中的符号替换为零:select replace('ds–','–','0');。在 MYSQL 查询中使用 replace 而不是 PHP
  • 编码和解码你的字符串?将解码后的字符串值插入数据库

标签: mysql regex


【解决方案1】:

不要寻找“最简单的方法”;您可能还会遇到麻烦。

– id Mojibake for SELECT HEX(col), col FROM ...,你应该得到E28093。如果是这样,那么我将解释一个修复。相反,如果你得到C3A2E282ACE2809C,那么你有一个“双重编码”,它需要一个不同的修复。

回答这些问题:

  • 您在客户端中的字节是否以 utf8 正确编码?他们可能是。
  • 您是否连接了默认的SET NAMES latin1(或set_charset('latin1') 或...)? (它必须是 utf8;但仅仅改变它是不够的。)
  • 表中的列是否被声明为CHARACTER SET latin1。 (或者它可能是从表/数据库继承的。)它应该是utf8。有多种改变它的方法;使用错误的方法只会让事情变得更糟。

计划 A:从正确的连接参数和表定义重新开始。

Plan B:回答以上问题,我会帮你解决问题。

【讨论】:

  • 实际上我没有得到 E28093 或 C3A2E282ACE2809C。但这里有答案: 1) 是的,客户端的字节是 UTF-8。 2)是的,我用默认连接。 3) 该表的字符集为 latin1。
  • 你得到了什么十六进制?
  • 符号“–”实际上位于句子的中间,因此很难说它是如何转换的。我现在所做的是将问题手动修复到损坏的行并修复代码,以便将来 符号将在插入数据库之前转换为–。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多