法语/英语和日语的 SQL 条目
Posted
技术标签:
【中文标题】法语/英语和日语的 SQL 条目【英文标题】:SQL entries in French/English and Japanese 【发布时间】:2019-12-19 13:51:42 【问题描述】:我有一个旧的 SQL4 数据库,我正在尝试将它重新上传到我们在 phpmyadmin 上新创建的数据库。表中的字符是拉丁文和日文。我试图更改那些特定的列,但结果仍然是我需要用日语显示的列的损坏字符。
这是我的问题的截图:https://imgur.com/a/P6GWrnF
例如,SQL 代码如下所示:
CREATE TABLE `bdd` (
`id` int(11) NOT NULL,
`ville` varchar(50) NOT NULL DEFAULT '',
`nom_fr` varchar(80) NOT NULL DEFAULT '',
`nom_jp` varchar(250) CHARACTER SET sjis NOT NULL DEFAULT '',
`adr_fr` text NOT NULL,
`adr_jp` varchar(3000) CHARACTER SET sjis NOT NULL,
`tel` varchar(20) NOT NULL DEFAULT '0',
`plan` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `bdd` (`id`, `ville`, `nom_fr`, `nom_jp`, `adr_fr`, `adr_jp`, `tel`, `plan`) VALUES
(47, 'Tokyo', 'THE KNOT TOKYO Shinjuku', '?U ?m?b?g ?????V?h', '4-31-1 Nishi Shinjuku, Shinjuku Ku, Tokyo', '?????s?V?h???V?h4-31-1', '03-3375-6511', 'the knot.JPG'),
(3546, 'Tokyo', 'HOSHINOYA Tokyo', '???????', '1-9-1 Otemachi, Chiyoda-ku, Tokyo 100-0004', '??100-0004 ?????s?????c??????????9??1', '0570-073-066', 'HOSHINOYA TOKYO.JPG'),
【问题讨论】:
mysql.rjweb.org/… 问号代表已经损坏编码。您需要恢复到数据损坏之前。你能从源数据集中得到十六进制吗? 看来损害确实已经造成了。这是原始的SQL源文件:codeshare.io/5wV6Wp当时没有损坏,只是在我重新导入数据时将文件更改为unicode之后。 【参考方案1】:SET NAMES "utf8";
CREATE TABLE `bdd` (
`id` int(11) NOT NULL,
`ville` varchar(50) NOT NULL DEFAULT '',
`nom_fr` varchar(80) NOT NULL DEFAULT '',
`nom_jp` varchar(250) CHARACTER SET sjis NOT NULL DEFAULT '',
`adr_fr` text NOT NULL,
`adr_jp` varchar(3000) CHARACTER SET sjis NOT NULL,
`tel` varchar(20) NOT NULL DEFAULT '0',
`plan` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT whatever you want
如果您将所有内容都存储在 utf8 中会更好,因为您有多种语言。在插入之前,您需要相应地设置连接参数,以便服务器可以了解您发送的内容。顺便说一句,也许你必须
SET NAMES 'sjis';
【讨论】:
我重新上传了数据库。我的所有专栏都在 utf8_general_ci 中,两个日语专栏都在 sjis_japanese_ci 中。但它仍然显示那种文本“?U ?m?b?g ?????V?h”。我应该在某处添加SET NAMES 'sjis';
吗?如何将其限制为仅这两列?谢谢。
@DestinationJapon - 数据是如何转储的?
SET NAMES 'sjis';
是您在任何其他 SQL 命令之前执行的命令。顺便说一句,真的检查你插入的数据,因为你给我的样本只包含问号而不是日本符号
在我从旧数据库中提取的未更改的 SQL 文件中,我得到了像 'ã–ìƒTƒbƒgƒ“ƒvƒŒƒCƒXƒzƒeƒ‹'
这样的符号,所以在更改为 Unicode 时可能出现了问题。这个旧文件是 ANSI 格式的。我将/*!40101 SET NAMES latin1 */;
更改为SET NAMES "utf8";
并为某些列设置了日语,因为它没有设置。旧文件:`nom_jp
varchar(250) NOT NULL default '',` 新文件:`nom_jp
varchar(250) CHARACTER SET sjis NOT NULL DEFAULT '',` 我唯一改变的另一件事是这个TYPE=MyISAM AUTO_INCREMENT=3688 ;
到这个ENGINE=MyISAM AUTO_INCREMENT=3688 ;
【参考方案2】:
问题解决了。 我不再尝试更改编码,而是创建了一个包含 utf8mb4_unicode_ci 中所有行的新表,并将数据导入到这个新表中。
【讨论】:
以上是关于法语/英语和日语的 SQL 条目的主要内容,如果未能解决你的问题,请参考以下文章