Невозможно сохранить специальный символ в Google Cloud SQL (MySQL) - PullRequest
2 голосов
/ 09 мая 2020

У меня два экземпляра MySQL: локально и в Google Cloud SQL. Одна и та же база данных создается на обоих с кодировкой utf8mb4, что можно проверить при запуске:

show variables like "character_set_database";

Также для обеих баз данных я импортирую данные из одного и того же файла csv.

Один из текстовых столбцов содержит специальные символы, например: ?⌛? ABC. Когда моя веб-страница извлекается из локального экземпляра, она может отображаться нормально, но когда я переключаюсь на извлечение данных из экземпляра Google Cloud, я получаю ?⌛? ABC. Как мне это исправить?

1 Ответ

1 голос
/ 09 мая 2020

Как описано в этом посте Чтобы преобразовать кодировку БД, вам нужно будет написать команды ALTER в базе данных.

Этот сценарий SQL может быть полезен для этого

# Convert the DB first
ALTER DATABASE <database_name> 
CHARACTER SET = utf8mb4 
COLLATE = utf8mb4_unicode_ci;
# Convert each table
ALTER TABLE <table_name> CONVERT TO 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
# Convert each column
# All varchar columns should be converted to stay consistent
ALTER TABLE <table_name>
  CHANGE <varchar_col1> <varchar_col1> VARCHAR(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  CHANGE <varchar_col2> <varchar_col2> VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Repair each table
REPAIR TABLE <table_name>
# Optimize each table
OPTIMIZE TABLE <table_name>

После этого обновления character_set_server флаг в вашем экземпляре Cloud SQL до utf8mb4

Теперь перезапустите свой экземпляр Cloud SQL и все

Пожалуйста, сделайте резервную копию ваших данных, прежде чем вносить какие-либо изменения!

...