2012-11-07 12 views
15

Wykonałem następujące zapytanie i z jakiegoś powodu jego nie zastępuje nowy znak linii w bazie danych. Mówi, że wiersze pasują do 1, ale bez zmian. Co może być nie tak?WYMIANA znaku nowego wiersza w MYSQL nie działa

mysql> UPDATE aboutme SET abouttext=REPLACE(abouttext,'\\n','') WHERE userid='5099a95cd944b8.22468149'; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 1 Changed: 0 Warnings: 0 
+0

Czy 'abouttext' jest kolumną, w której chcesz przechowywać zamiennik? Czy na pewno nie masz na myśli 'question = REPLACE (question, '\\ n', '')'? –

+0

Myślę, że kwerenda odnalazła wiersz, ale nie wprowadziła zmian, ponieważ nie można znaleźć 'replace' '\\ n' – jcho360

Odpowiedz

24

można dopasować znak nowej linii, a nie przy użyciu \n\\n.

Kod:

UPDATE aboutme 
SET abouttext=REPLACE(abouttext,'\n','') 
WHERE userid='5099a95cd944b8.22468149'; 
+0

Próbowałem nawet z \ n i nie zaktualizowałem. –

+1

Czy możesz dopasować wiersz za pomocą "SELECT", na przykład "WYBIERZ * Z ODPOWIEDZI GDZIE o tekstie LIKE"% \ n% "? Być może trzeba będzie znaleźć odpowiedni znak kontrolny do dopasowania. Zobacz np. kod wymieniony na tej stronie: http://dev.mysql.com/doc/refman/5.5/en/regexp.html – Ryan

0

to co dzieje

mysql> mysql> select * from t1 limit 3; 
+----------+------------+-----------+---------------------+ 
| actor_id | first_name | last_name | last_update   | 
+----------+------------+-----------+---------------------+ 
|  1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 | 
|  2 | NICK  | WAHLBERG | 2006-02-15 04:34:33 | 
|  3 | ED   | CHASE  | 2006-02-15 04:34:33 | 
+----------+------------+-----------+---------------------+ 
3 rows in set (0.00 sec) 

mysql> update t1 set first_name=replace(first_name,'abc','') where first_name='ed'; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 10 Changed: 0 Warnings: 0 

mysql> select * from t1 limit 3; 
+----------+------------+-----------+---------------------+ 
| actor_id | first_name | last_name | last_update   | 
+----------+------------+-----------+---------------------+ 
|  1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 | 
|  2 | NICK  | WAHLBERG | 2006-02-15 04:34:33 | 
|  3 | ED   | CHASE  | 2006-02-15 04:34:33 | 
+----------+------------+-----------+---------------------+ 
3 rows in set (0.00 sec) 


mysql> update t1 set first_name=replace(first_name,'ED','EDD') where first_name='ed'; 
Query OK, 10 rows affected (0.00 sec) 
Rows matched: 10 Changed: 10 Warnings: 0 

mysql> select * from t1 limit 3; 
+----------+------------+-----------+---------------------+ 
| actor_id | first_name | last_name | last_update   | 
+----------+------------+-----------+---------------------+ 
|  1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 | 
|  2 | NICK  | WAHLBERG | 2006-02-15 04:34:33 | 
|  3 | EDD  | CHASE  | 2006-02-15 04:34:33 | 
+----------+------------+-----------+---------------------+ 

3 rows in set (0.00 sec) 

Chodziło mi o to, że gdzie warunek, że to działa, dlatego trzeba „wiersze dopasowane: 1”, ale swój zastąpić nie znajdź \\n, aby go zastąpić, dlatego changed: 0 sprawdź dane w tabeli.

1

Myślisz, że zawiera on \n, ale ma \r.

update [Table] set [column]=replace(convert([column] using utf8) ,'\r',''); 

W twoim przypadku:

update aboutme set abouttext=replace(convert(abouttext using utf8) ,'\r',''); 
8

Jeśli \ n nie działa tak jak w moim przypadku, następujące pracował \ r \ n

UPDATE aboutme 
SET abouttext=REPLACE(abouttext,'\r\n','') 
WHERE userid='5099a95cd944b8.22468149'; 

Mój przypadek był aplikacji internetowych.

0

REPLACE funkcja jest wielkość liter, myślę, że należy wersję serwera MySQL

opis = Replace (opis, 'Videosite', '') video.5la.net jest inny wynik z opisem = Replace (opis, "VideoSite", "video.5la.net")