尽可能使用ISO-8859-1而不是UTF-8明显更好吗?

时间:2011-12-06 22:18:34

标签: mysql utf-8 character-encoding storage

对于脚本的全球化,使用UTF-8作为默认字符集是很常见的;例如在HTML或默认的mysql字符集中。对于拉丁语网站也是如此,其中字符属于ISO-8859-1类。在不需要ISO-8859-1字符时使用UTF-8不是很有利。从优势来看,我的意思是非常有益。

我的观点是UTF-8只有0到127个字符是1个字节,而128到255个字符是2个字节;其中ISO-8859-1是1字节系统。它在数据库存储中不起关键作用吗?

4 个答案:

答案 0 :(得分:5)

如果您现在和将来永远需要的一切都是ISO-8859-1,那么您将通过使用它来节省空间,但如果使用的大多数字符都是< 128.如果你需要使用ISO-8859-1以外的任何东西,你将处于一个受伤的世界。从整体来看,UTF-8的存储成本远低于实施多种编码的成本。

答案 1 :(得分:4)

当您使用UTF-8时,这些127 ISO-8859-1个1字节字符中的大多数都是最常用的。我们来看看 here 。如果您使用UTF-8,当您使用127-255个字符之一时, not commons我{{{} 3}} )。

我的意见?如果可以,如果您没有处理问题,请使用UTF-8。你节省一天的时间,你需要一些额外的字符(或者你需要翻译内容的那一天),在数据库中这里和那里真的值得多一些额外的字节......

答案 2 :(得分:3)

简短回答:没关系。

长(呃)回答:这样想。您有一个message表,其中包含论坛的消息。你有很多消息(比方说,100万)。假设由于UTF-8,每条消息占用10个额外字节。这是1000万额外的字符,甚至不是10MB(不计算索引)。

对于这样一个“热门”论坛,您最多不会使用超过15MB的存储空间。没什么。你绝对不应该担心额外的字节丢失,而UTF-8将提供比10 MB更重要的好处。

答案 3 :(得分:1)

尺寸重要吗?

如您所知,U + 0080到U + 009F范围内的字符占UTF-8空间的两倍,与ISO-8859-1相同。但是,这些角色多久被使用一次?

在我从维基百科首页获得的典型西班牙语文本中:

  

Artículopenoo

     

Lasséptimatemporadade la seriedetelevisióndedibujos animados Los   Simpson fue emitida originalmente por la cadena Fox entre el 17 de   septiembre de 1995 y el 19 de mayo de 1996. Los productores ejecutivos   delaséptimatemporadafueron Bill Oakley和Josh Weinstein,quienes   producirían21episodios de la temporada。 David Mirkin表演   runner de los cuatro restantes,incluyendo dos vestigiosquehabían   sido producidos para la temporada anterior。 Laséptimatemporada   estuvo nominada para dos Premios Primetime Emmy,incluyendo la   的分类“Mejor programa animado(deduraciónmenora una hora)”y   obtuvo un Premio Annie por“Mejor programa animadodetelevisión”。啦   versiónenDVD fue lanzada a la venta enlaRegión1el 13 de   diciembre de 2005,enlaRegión2el 30 de enero de 2006 y en la   Región4el 29 de marzo delmismoaño。 La caja recopilatoria fue   puesta a la venta en dos formatos diferentes:una caja con la forma de   la cabeza de Marge y otrarectangularclásica,en la cual el dibujo   muestra el estreno deunapelícula。

1044个ASCII字符中有17个非ASCII字符。这意味着在使用UTF-8编码时,扩展仅增加1.6%。非常值得担心,特别是考虑到全ASCII HTML标记时。

(但是,对于像Sango这样更加重音的语言,差异可能很大。)

无论如何,你的想法会如何运作?

您要在windows-1252中对所有数据进行编码吗?这不会给你全球化;地球不会停留在奥得河。真正的ISO-8859-1(缺少欧元)更糟糕;全球不会停留在英吉利海峡。

使用其编码标记文字?这适用于XML,HTML和SMTP。但你问:

  

它在数据库存储中不起关键作用吗?

您打算如何在数据库中存储混合的Latin-1和UTF-8字符串?

有两列EncodedText BLOB, IsUtf8 BOOLEAN?你怎么会查询?当然,你不会只看EncodedText而忽略IsUtf8;这种方法导致了mojibake。

可以编写一个包含CASE WHEN IsUtf8 THEN EncodedText ELSE Latin1ToUtf8(EncodedText) END列的视图和一个正确的INSTEAD OF INSERT触发器,但这可能会花费更多的字节而不是保存。