от
Я использую MySQL 5.6 и я хочу изменить кодировку по умолчанию один стол (от латинских типа 1 в utf8), не изменяя существующие строки и столбцы. На основе документации, я пробовал следующую команду:
ALTER TABLE mytable DEFAULT CHARACTER SET utf8;
Он модифицировал кодировка по умолчанию кодировка от моего стола и не изменил параметры сортировки столбцов, как ожидалось, но я был очень удивлен увидеть:
Query OK, 32141 rows affected (6.31 sec)
Records: 32141 Duplicates: 0  Warnings: 0
Кроме "32141 затронутых строк", результаты, как ожидается, как вы можете увидеть ниже:
MySQL> select count(*) from mytable;
 

MySQL> show table status like 'mytable';
 

MySQL> show create table mytable;
CREATE TABLE `mytable` (
  `ID` varchar(255) NOT NULL,
  `COL1` double DEFAULT NULL,
  `COL2` longtext CHARACTER SET latin1,
  `COL3` datetime DEFAULT NULL,
  `COL4` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `COL5` int(11) DEFAULT NULL,
  `COL6` datetime DEFAULT NULL,
  `COL7` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `COL8` datetime(3) NOT NULL,
  `COL9` int(11) NOT NULL DEFAULT '

MySQL> show full columns from mytable;
 

Мои параметры соединения следующим образом:

MySQL> show variables where variable_name like '%char%' or variable_name like '%collation%';
 

Обратите внимание, что:


данных была создана на основе Java-приложения
во время создания данных, параметры подключения были заданы в utf8
нет ФК, связанные с этой таблицей


Когда я пытаюсь воспроизвести некоторые вновь созданные таблицы, кажется, что строки не изменяются. См. ниже "0 затронутых строк":

MySQL> select count(*) from mytesttable;
 

MySQL> alter table mytesttable character set utf8;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
Я пытался изменить мои параметры соединения обратно в latin1 во время создания данных, но это не меняет результата: по-прежнему "0 затронутых строк". Итак, мои вопросы: Я понимаю команды, верно? (что он не должен изменять строки) Чем можно объяснить, что строки зависит в 1-м случае? Редактировать Я только что выяснил, что проблема не произойдет, если я удалить раздел. С перегородкой я получаю "ХХХ затронутых строк" Без раздела я получаю "0 затронутых строк" Это ожидается? Правка 2 с резюме Изначально: Стол был используя
latin1
в качестве кодировки по умолчанию (то же для столбцов) Связь была заявлена как
utf8
Что работает: Перед любой командой
ALTER TABLE
, символы, такие как "é", кажется
latin1
закодированных (
E9
) Выполнив команду
ALTER TABLE mytable CHARACTER SET utf8mb4;
не изменять данные (в шестнадцатеричном команда по-прежнему показывает
E9
) Колонна все-таки объявили
latin1
. Выполнив команду
ALTER TABLE mytable MODIFY COL2 LONGTEXT CHARACTER SET utf8mb4
изменения столбце
utf8mb4
(
C3A9
) До сих пор так хорошо. Оставшиеся вопросы: Как убедиться, что все данные в таблице
latin1
? Я пробовал
SELECT COL2 FROM mytable WHERE LENGTH(COL2) != CHAR_LENGTH(COL2) LIMIT 1
и я получил 0 результатов. Достаточно ли этого? Почему команда
ALTER TABLE mytable CHARACTER SET utf8mb4;
показывает "32141 затронутых строк", когда кажется, что данные не изменяются? (это происходит, когда таблица разделов и индекс на одном и том же столбце) Следуя предыдущему пункту, это безопасно (нужен?) чтобы изменить кодировку по умолчанию в таблице? Или я должен просто придерживаться внесении изменений в столбцы? Спасибо большое за вашу помощь

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

...