Здравствуйте, я пытаюсь преобразовать свою базу данных, одну таблицу и поле в utf, используя этот скрипт.
-- Write a script that converts hbtn_0c_0 database to UTF8
-- (utf8mb4, collate utf8mb4_unicode_ci) in your MySQL server.
-- You need to convert all of the following to UTF8:
-- Database hbtn_0c_0
-- Table first_table
-- Field name in first_table
ALTER DATABASE
`hbtn_0c_0`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE `hbtn_0c_0`;
ALTER TABLE
`first_table`
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE
`first_table`
CHANGE `name`
VARCHAR(256)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Но у меня ошибка SQL. Пожалуйста помогите
black_genius@genius:~/Documents/ALX_Task/alx-higher_level_programming/0x0D-SQL_introduction$ cat 100-move_to_utf8.sql | mysql -hlocalhost -uroot -p
Enter password:
ERROR 1064 (42000) at line 22: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(256)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci' at line 4
Я использую версию mysql v8.0.31 на Ubuntu 22.10.






Когда вы изменяете столбец, вам необходимо указать старое имя и новое имя, даже если это одно и то же имя. См. синтаксис в документации :
CHANGE [COLUMN] old_col_name new_col_name column_definition
В вашем случае должно быть
ALTER TABLE
`first_table`
CHANGE `name` `name`
VARCHAR(256)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Демонстрация: . db-fiddle.com/f/qFuvFqP5PEGbsc8F8DfiaN/0
@RickJames Как так? Если данные были не в формате utf8, они будут преобразованы. db-fiddle.com/f/qFuvFqP5PEGbsc8F8DfiaN/0
@RickJames Демонстрация скрипки, которую я разместил в комментарии выше, с вами не согласна. Как и документация: «Для изменения типа данных с помощью CHANGE или MODIFY MySQL пытается преобразовать существующие значения столбца в новый тип, насколько это возможно».
Вы правы.
Вам не нужно менять отдельный столбец, если вы используете ALTER TABLE ... CONVERT TO CHARACTER SET .... Этот ALTER TABLE автоматически преобразует все строковые столбцы.
В документации описаны:
Чтобы изменить набор символов таблицы по умолчанию и все столбцы символов (CHAR, VARCHAR, TEXT) к новому набору символов, используйте такой оператор, как это:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;Оператор также изменяет сопоставление всех столбцов символов.
Ответ Пола Шпигеля о синтаксисе CHANGE COLUMN верен; этот синтаксис позволяет вам изменить имя столбца, поэтому вам нужно указать имя столбца дважды.
Альтернативой является использование MODIFY COLUMN вместо CHANGE COLUMN. Это позволяет изменить тип и параметры столбца, включая набор символов, но не изменить имя столбца. Таким образом, нет необходимости дважды указывать имя столбца.
ALTER TABLE
`first_table`
MODIFY `name`
VARCHAR(256)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Но опять же, в вашем примере нет необходимости использовать ни CHANGE COLUMN, ни MODIFY COLUMN. Преобразование набора символов должно быть достигнуто с помощью действия CONVERT TO CHARACTER SET.
Какая кодировка используется сейчас?