无法在Google Cloud SQL(MySQL)上存储特殊字符

问题描述 投票:2回答:1

我有两个MySQL实例:本地和Google Cloud SQL。在两个字符集utf8mb4上都创建了相同的数据库,运行时可以对其进行验证:

show variables like "character_set_database";

同样对于两个数据库,我也从相同的csv文件导入数据。

文本列之一具有特殊字符,例如:🥚⌛🍳 ABC。当我的网页从本地实例检索时,它可以正常显示,但是当我切换为从Google Cloud实例检索数据时,得到了?⌛? ABC。我该如何解决?

mysql google-cloud-sql
1个回答
0
投票

this post中所述,为了转换DB编码,您将需要在数据库上编写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>

此更新后,您的Cloud SQL实例中的character_set_server flag变为utf8mb4

现在重新启动您的Cloud SQL实例就这些了>>

请先备份您的数据,然后再进行任何更改!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.