小编Fab*_*bio的帖子

MySQL 默默地将 UTF 字符替换为文字问号

我遇到了类似于这个问题的情况,即我正在使用一个旧数据库,该数据库在 latin1 表中包含 UTF8 内容(我知道非常难看)。

\n\n

现在我正在从一个完全 utf8 的新应用程序获取新数据,并与其数据库一起使用。为了支持其他遗留系统,应用程序还在遗留表中写入其 utf8 数据的副本。据我所知,只要您读回并将这些数据显示为 UTF8,就应该可以在 latin1 表中写入 utf8 内容。有很多教程解释了如何长期解决这种情况,但我宁愿不应用它们,除非绝对必要(遗留系统将很快被解雇,我不希望有停机时间来解决这个问题,如果可能的)

\n\n

这是一个最小的 SQL 脚本,它重现了我的问题:

\n\n
CREATE TABLE `articles` (\n  `content` mediumtext NOT NULL,\n  FULLTEXT KEY `content` (`content`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;\n\nSET NAMES utf8;\nSET CHARACTER SET utf8;\n-- Turkish word for Croatia, second char is \\xC4\\xB1\nINSERT INTO `articles` (`content`) VALUES (\'H\xc4\xb1rvatistan\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的系统中,我没有从 MySQL 收到错误,但在INSERT语句之后,该单词的第二个字符被默默删除并替换为文字?(\'\\x3F\')。

\n\n
mysql> SELECT content, HEX(content), HEX(\'H\xc4\xb1rvatistan\') FROM articles;\n+-------------+------------------------+--------------------------+\n| content     | HEX(content)           | HEX(\'H\xc4\xb1rvatistan\')       |\n+-------------+------------------------+--------------------------+\n| …
Run Code Online (Sandbox Code Playgroud)

mysql character-set utf-8 encoding

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

character-set ×1

encoding ×1

mysql ×1

utf-8 ×1