Mysql替换匹配并替换无效字符

时间:2014-08-01 12:56:14

标签: mysql

我在Racktables创建的一个mysql表中有一个奇怪的连字符。我试图用正常的替换它,但我似乎错过了一些东西:

mysql> update Port set reservation_comment = replace(reservation_comment,'–','-');
Query OK, 0 rows affected (0.01 sec)
Rows matched: 2358  Changed: 0  Warnings: 0

正如您所看到的那样,“坏”连字符匹配但未被替换。 我曾尝试将单引号更改为双引号并转义连字符,但没有真正的变化。

以下是一些示例数据:

| 2690 |       767 | R131226-005-23Ha |      1 |   24 | NULL         | C130527-059                                  |         |
| 2691 |       768 | R131226-005-24Ha |      1 |   24 | NULL         | C130527-036                                  |         |
| 2692 |       770 | R131226-006-01Ha |      1 |   24 | NULL         | C140305�001                                  |         |
| 2693 |       773 | R131226-006-04Ha |      1 |   24 | NULL         | C140305�004                                  |         |
| 2694 |       784 | R131226-006-15Ha |      1 |   24 | NULL         | C140305�015                                  |         |
| 2695 |       785 | R131226-006-16Ha |      1 |   24 | NULL         | C140305�016                                  |         |
| 2696 |       793 | R131226-006-24Ha |      1 |   24 | NULL         | C140305�024                                  |         |
| 2697 |       771 | R131226-006-02Ha |      1 |   24 | NULL         | C140305�002                                  |         |
| 2698 |       772 | R131226-006-03Ha |      1 |   24 | NULL         | C140305-003    

我试图替换的连字符的编码方式似乎不同

编辑:

所以,下面的所有语法都很好。问题是我无法匹配坏连字符。如果我试图取代“好”的一切都很好:

mysql> UPDATE Port     SET reservation_comment=REPLACE(reservation_comment,'-','[[good_hyphen]]');
Query OK, 367 rows affected (0.34 sec)
Rows matched: 2358  Changed: 367  Warnings: 0

但如果我尝试更换坏的:

mysql> UPDATE Port     SET reservation_comment=REPLACE(reservation_comment,'–','[[bad_hyphen]]');
Query OK, 0 rows affected (0.01 sec)
Rows matched: 2358  Changed: 0  Warnings: 0

我将研究该角色的编码,并采用不同的方式来匹配它。

2 个答案:

答案 0 :(得分:1)

这是匹配所有行,无论连字符是什么,因为没有WHERE子句。它只是没有改变没有坏连字符的行。

可能是坏连字符被存储为未知字符,因此REPLACE不会将其作为目标。在更改之前,您可能必须更改列上的字符集/排序规则以使其正确导入..或调整Racktables输出数据的方式。

答案 1 :(得分:1)

好的,一旦我确定了角色,我就通过做类似于this的帖子来解决它:

mysql> select hex("–");
+------------+
| hex("–") |
+------------+
| E28093     |
+------------+
1 row in set (0.00 sec)

然后我确认匹配:

mysql> select x'E28093';
+-----------+
| x'E28093' |
+-----------+
| –       |
+-----------+
1 row in set (0.00 sec)

最后替换:

mysql> UPDATE Port     SET reservation_comment=REPLACE(reservation_comment,x'E28093','-');
Query OK, 33 rows affected (1.55 sec)
Rows matched: 2358  Changed: 33  Warnings: 0