我遇到了类似于这个问题的情况,即我正在使用一个旧数据库,该数据库在 latin1 表中包含 UTF8 内容(我知道非常难看)。
\n\n现在我正在从一个完全 utf8 的新应用程序获取新数据,并与其数据库一起使用。为了支持其他遗留系统,应用程序还在遗留表中写入其 utf8 数据的副本。据我所知,只要您读回并将这些数据显示为 UTF8,就应该可以在 latin1 表中写入 utf8 内容。有很多教程解释了如何长期解决这种情况,但我宁愿不应用它们,除非绝对必要(遗留系统将很快被解雇,我不希望有停机时间来解决这个问题,如果可能的)
\n\n这是一个最小的 SQL 脚本,它重现了我的问题:
\n\nCREATE 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\')。
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)