MySQL:在现有数据库中添加对亚洲字符的支持
我正在寻找一种最佳实践方法,以便将对亚洲字符集的支持添加到现有数据库中。我们现有的表位于
latin1
字符集中:
show create table books
CREATE TABLE `books` (
`id` varchar(255) NOT NULL,
`category` varchar(255) default NULL,
`contactEmail` varchar(255) default NULL,
`description` text,
`price` varchar(255) default NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1
目前,当我们为description
字段输入UTF8字符时,我们会回来'?'往返亚洲角色的角色。 Latin1字符工作得很好。
我可以简单地用这样的东西转换这个表吗?
ALTER TABLE books CONVERT TO CHARACTER SET utf8
我知道这不会神奇地修复表中已存在的数据。我只是希望它能够适用于未来的新数据。
我是否需要担心整理?我不知道这对非拉丁字符有什么用处。
将utf8
作为数据库的默认值是否有意义?那有什么警告吗?
谢谢
没有找到相关结果
已邀请:
2 个回复
梦砍废么
进行编码,所以它只能存储latin1字符集中存在的字符。 Latin1是ISO-8859-1的简写,你可以看到它有什么字符 - 没有亚洲字符,这就是为什么它们不会存储。我有点惊讶MySQL没有这样的输入错误。 将utf8作为数据库的默认值是否有意义?那有什么警告吗? 如果您需要存储多种语言的字符,UTF-8将是一个不错的选择。 UTF-8作为Unicode编码,允许您存储来自多种语言的任何Unicode字符(实际上有数千个字符)。您可以使用UTF-8存储字符串“Dogcaféθλφ你好”。 UTF-8被广泛使用,并且能够编码任何东西 - 我强烈推荐它。 我会仔细阅读互联网,找到有关转换MySQL表的文献,以确保没有任何陷阱。如果这是生产数据,请在脱机数据集上进行测试 - 开发表或QA表。 最后,您似乎表明在您的数据库中存在一半存储的亚洲字符。我会弄清楚存储的是什么:如果它是亚洲字符的UTF-8序列,但数据库认为它是latin1(一个经典的mojibake案例),可能会有一些恢复。我担心转换可能会尝试将UTF-8代码单元转换为latin1,从而产生非常有趣的输出。测试测试。
扦帽次杏
第一个返回值是字符串的长度(以字节为单位),第二个是字符串的长度(以字符为单位)。如果在某种程度上有任何多字节字符,这两个值将不同。 互联网上提供了大量的转换指南,而且我发现这些指南非常有用。