【问题标题】:MySql Database change existing table to UTF8MySql 数据库将现有表更改为 UTF8
【发布时间】:2017-10-05 15:31:47
【问题描述】:

MySql 支持西里尔字母有一个奇怪的问题。数据库从一开始就在 utf8_unicode_ci 中创建,但表没有。现在表数据,如果以西里尔语提供,看起来像这样????????,如果我从 utf 开始创建一个表没有问题,但是如果我尝试使用更改现有的表编码

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

应该更改现有数据或

ALTER TABLE Strategies
  CHARACTER SET utf8,
  COLLATE utf8_unicode_ci;

这应该改变未来的数据,它不起作用。

我也更改了 my.cnf 文件并添加到

[mysqld]
#
#default-character-set=utf8 this one breaks mysql restart
character-set-server=utf8
skip-character-set-client-handshake
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
init_connect='SET collation_connection = utf8_general_ci'

如果我运行 SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collat​​ion%';我明白了:

我还直接在我的管理员的 PHP 中更改为 utf,它实际上显示该表是 utf,但现有的 ????????? 没有任何反应或未来的西里尔文输入。

希望其他人遇到过这种问题,非常感谢任何帮助或建议。谢谢。

【问题讨论】:

  • 你得到什么...从 information_schema.columns 中选择 CHARACTER_SET_NAME、COLLATION_NAME 其中 table_schema='' 和 table_name=''。 ?
  • 有问题的表/列的原始编码是什么?
  • 它曾经是 latin1_swedish_ci
  • 命令好像返回 0... 可能我没有完全理解什么是 table_schema。

标签: mysql encoding utf


【解决方案1】:

如果表格以 latin1 开头 并且 包含 latin1 编码的字符,请使用 ALTER TABLE ... CONVERT TO CHARACTER SET utf8(就像您一样)

在转换之前,测试旧编码做两件事:

SHOW CREATE TABLE ... -- to see that the columns say latin1
SELECT HEX(col) ... -- to see what the encoding looks like: é should show E9

我说“之前”是因为有可能将 utf8 错误地塞进 latin1 中。 é 应该显示 C3A9——这是“双重编码”。

转换后同样做:

SHOW CREATE TABLE ... -- to see that the columns say utf8
SELECT HEX(col) ... -- to see what the encoding looks like; é should show C3A9

C383C2A9 表示双重编码。一团糟。

如果您以root 的身份连接,则不要依赖init-connect='SET NAMES utf8'init-connect 将被root 和任何其他SUPER 用户忽略。

但是...您说您将西里尔文文本放入 latin1 列?这是“不可能的”,因为 latin1 不能代表除基于拉丁语的西欧字符以外的任何内容。所以...你可能有“双重编码”。

有关更多调试,请参阅Trouble with utf8。特别注意“问号”。

要修复双重编码,请参阅 Fixes 并选择合适的大小写。此链接还说明了您应该做什么(两步改变)而不是您做了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2016-07-13
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多