#mysql #phpmyadmin
#mysql #phpmyadmin
Вопрос:
В моей старой резервной копии базы данных в некоторых столбцах использовались символы UTF-8, но я полагаю, что они были экспортированы в кодировку latin1.
Теперь у меня проблема с некоторыми столбцами, в которых есть «кириллические (utf8) символы / текст»: http://prntscr.com/vu4uql
Я смог преобразовать несколько столбцов в UTF8, используя эту команду:
UPDATE jos_content SET title = CONVERT(CAST(CONVERT(title USING latin1) AS BINARY) USING utf8);
Столбцы: «заголовок», «интротекст» теперь преобразованы и показывают «кириллические (utf8) символы / текст»
Но у меня проблема только с одним столбцом «fulltext», для которого, когда я пытаюсь использовать приведенную выше команду в SQL> phpmyadmin, я получаю следующую ошибку:
Error
Static analysis:
18 errors were found during analysis.
Unrecognized keyword. (near "fulltext" at position 23)
Unexpected token. (near "=" at position 32)
Unrecognized keyword. (near "CONVERT" at position 34)
Unexpected token. (near "(" at position 41)
Unrecognized keyword. (near "CAST" at position 42)
Unexpected token. (near "(" at position 46)
Unrecognized keyword. (near "CONVERT" at position 47)
Unexpected token. (near "(" at position 54)
Unrecognized keyword. (near "fulltext" at position 55)
Unrecognized keyword. (near "USING" at position 64)
Unexpected token. (near "latin1" at position 70)
Unexpected token. (near ")" at position 76)
Unrecognized keyword. (near "AS" at position 78)
Unrecognized keyword. (near "BINARY" at position 81)
Unexpected token. (near ")" at position 87)
Unrecognized keyword. (near "USING" at position 89)
Unexpected token. (near "utf8" at position 95)
Unexpected token. (near ")" at position 99)
SQL query:
UPDATE jos_content SET fulltext = CONVERT(CAST(CONVERT(fulltext USING latin1) AS BINARY) USING utf8)
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'fulltext = CONVERT(CAST(CONVERT(fulltext USING latin1) AS BINARY) USING utf8)' at line 1
Как я могу исправить / преобразовать этот столбец как предыдущий?
Ответ №1:
Основываясь на том, что вы опубликовали, проблема в том, что вы используете fulltext
в качестве имени столбца, но это также зарезервированное слово, используемое для определения типа индекса при создании или изменении структуры таблицы.
Окружите каждое вхождение слова fulltext
обратными метками, например, так:
UPDATE jos_content SET `fulltext` = CONVERT(CAST(CONVERT(`fulltext` USING latin1) AS BINARY) USING utf8)
Именно по этой причине полезно всегда указывать имена базы данных, таблиц и столбцов (плюс что-либо еще, например, представление, процедуру и т. Д.) В обратных значках.
Кстати, https://github.com/phpmyadmin/phpmyadmin/wiki/Garbled_data содержит несколько подсказок для других решений с декодированием искаженных данных, но я считаю, что ваша проблема ограничивается обратными ссылками, и когда вы решите это, ваш запрос должен работать правильно.
Комментарии:
1. Tnx для ответа, через много часов я понимаю, что «полнотекстовый» — это зарезервированное слово, поэтому нашел способ изменить столбец на другое слово, использовать предыдущие «команды» для замены символов, и после этого я изменил имя столбца на «полнотекстовый». Все равно Tnx