如何在MySql中将拉丁字符转换为相应的unicode转义序列?

时间:2015-10-13 16:19:27

标签: mysql encoding

首先让我告诉你我正在使用的字符集和排序规则是utf8_general_ci。

为了举例,我有两个表,A和B.

表A有一列(我们称之为'columnX')。在表格的任何一行中,columnX可能包含一个包含拉丁字符的值,例如'niño'(英文中的'boy')。

表B有一个专栏(让我们称之为'columnY'),我知道这可能包含'niño'作为其价值的一部分,例如'esunniñobueno'('他是一个英语中的好男孩'),但是'ñ'将被转义,因为我知道columnY包含JSON字符串,因此字符串文字将被编码为'es un ni \ u00f1o bueno'。

我需要找到表A的所有行,其列A.columnX包含在任何B.columnY中。我需要一个在其相应的转义版本中转换al A.columnX的函数。以下代码的内容:

SELECT * FROM A
INNER JOIN B
  ON B.columnY LIKE CONCAT('%', escapeUtf8(A.columnX) ,'%') 

我尝试过使用QUOTECONVERTCAST以及谷歌搜索了很多,但我发现的所有内容都与我需要的相反(帖子解释了如何转换)将序列转义为人类可读的东西。)

提前致谢,

 Adrián

2 个答案:

答案 0 :(得分:0)

您应该将ñ作为十六进制C3B1存储在utf8列中。执行SELECT HEX(col) ...检查。如果它是&...;(有大约3种可能的方式来表示“html实体”),那么你应该在INSERTing文本时解决这个问题。

escapeUtf8()只会使情况复杂化;那里不需要任何功能。

答案 1 :(得分:0)

我找到了解决方法

我所做的是使用我在这里找到的STRINGDECODE函数(看看Joni的答案):MySQL decode Unicode to UTF-8 function我用它来“反转”查询。

我没有从表A中用“ñ”(或重音字母等)转义列,而是使用STRINGDECODE转义表B中的转义列。

此外,由于我需要多次使用已解码的列值,因此我将B.columnY存储在临时表中(当然,在应用STRINGDECODE之后)以供以后使用。这将是示例代码:

CREATE TEMPORARY TABLE sanitizedB
SELECT STRINGDECODE(columnY) as sanitizedColumnY, columnZ 
FROM B;

SELECT * FROM A
INNER JOIN sanitizedB SB
  ON SB.sanitizedColumnY LIKE CONCAT('%', A.columnX ,'%') 

当然,我还添加了其他我需要的列供以后使用。

值得一提的是,B表的记录少于10,000条,因此临时表的创建速度非常快......可能不是最佳解决方案,但对我来说效果很好。