【问题标题】:Unable to store special character on Google Cloud SQL (MySQL)无法在 Google Cloud SQL (MySQL) 上存储特殊字符
【发布时间】:2020-05-08 22:57:34
【问题描述】:

我有两个 MySQL 实例:本地实例和 Google Cloud SQL 实例。使用charset utf8mb4在两者上创建相同的数据库,可以在我运行时验证:

show variables like "character_set_database";

对于这两个数据库,我从同一个 csv 文件中导入数据。

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

【问题讨论】:

  • this 能解决您的问题吗?
  • @Chris32 是的,现在解决了!如果您可以输入答案,我会将其标记为正确。谢谢

标签: mysql google-cloud-sql


【解决方案1】:

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 实例,仅此而已

请在进行任何更改之前备份您的数据!

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多