Как удалить из БД MySQL невидимый неразрывный пробел?

В БД заносятся названия товаров с невидимыми неразрывными пробелами. На сайте эти пробелы отображаются кодом &_nbsp; а в БД их нет. Как мне их все заменить обычным пробелом? Какой SQL запрос сделать?
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
@galaxy
Неразрывный пробел - U+00A0. Можете просто его скопировать и сделать REPLACE (в винде можно этот символ ввести в любом текстовом редакторе через Alt+0160 - цифры набирать на numpad'е).
UPDATE table SET col = replace(col, ' ', ' ') ...
Правда, могут случиться проблемы с кодировками по дороге. Зная кодировку колонки, можно надежнее без копирования сделать так (на примере UTF-8, с учетом, что этот пробел в UTF-8 кодируется как C2 A0):
UPDATE table SET col = replace(col, convert(0xC2A0 using utf8mb4), ' ') ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mletov
Возможные варианты того, почему так происходит и что можно сделать:

1) Пробелы все-таки хранятся в базе как &_nbsp;, тогда и удалять из базы надо &_nbsp;. На всякий случай проверьте еще раз. Не исключен вариант, что при просмотре показываетя пробел, а хранится как спецсимвол. Попробуйте посмотреть не через PhpMyAdmin, а какой-нибудь утилиткой типа heidi или workbench

2) При выводе из базы пробелы заменяются на &_nbsp;, тогда надо не в базу лезть, а в php код, который отвечает за вывод, и убрать замену пробелов из него. Если там сильно замудрено и не хочется ковырять ядро, то можно написать свою функцию-обертку, которая обратно реплэйсит &_nbsp; на пробел
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы