无法在 Google 云 SQL 上存储特殊字符 (MySQL)
Unable to store special character on Google Cloud SQL (MySQL)
我有两个 MySQL 实例:本地实例和 Google 云端 SQL。使用字符集 utf8mb4
在两者上创建了相同的数据库,这可以在我 运行:
时验证
show variables like "character_set_database";
同样对于两个数据库,我从同一个 csv
文件导入数据。
其中一个文本列具有如下特殊字符:⌛ ABC
。当我的网页从本地实例检索时,它可以正常显示,但是当我切换到从 Google 云实例检索数据时,我得到 ?⌛? ABC
。我该如何解决?
如this post中所述,为了转换数据库编码,您需要在数据库上编写 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 实例,仅此而已
请在进行任何更改之前备份您的数据!
我有两个 MySQL 实例:本地实例和 Google 云端 SQL。使用字符集 utf8mb4
在两者上创建了相同的数据库,这可以在我 运行:
show variables like "character_set_database";
同样对于两个数据库,我从同一个 csv
文件导入数据。
其中一个文本列具有如下特殊字符:⌛ ABC
。当我的网页从本地实例检索时,它可以正常显示,但是当我切换到从 Google 云实例检索数据时,我得到 ?⌛? ABC
。我该如何解决?
如this post中所述,为了转换数据库编码,您需要在数据库上编写 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 实例,仅此而已
请在进行任何更改之前备份您的数据!