我在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
我将研究该角色的编码,并采用不同的方式来匹配它。
答案 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