这是一个提供信息的问题,而不是如何。我在MySQL中创建了一个默认编码设置为UTF-8的数据库。现在一些主键是VARCHAR,它使主键超过1000位限制,因为每个使用utf-8的char是3个字节。每个密钥是255个字符,它将密钥带到1,530字节。
因此,如果我要将编码更改为Latin-1,则主键将低于1000字节,并且像魔术一样,解决方案将起作用。但是使用UTF-8有什么好处呢?它为何如此受欢迎?
答案 0 :(得分:11)
首先;似乎存在一两种误解:
首先; UTF-8仅对需要此字符的字符使用多个字节;这是一个VBR编码。
二; 255乘以3不是1530;它只有一半。
第三;同时请记住,我本身并不是一个真正的数据库专家; VARCHAR主键听起来非常糟糕。
UTF-8受欢迎的原因;正如@Tomas Kohl所说;是它可以代表任何Unicode字符;但仍允许以单字节表示ASCII(U + 127和down)。
如果你有任何国际野心 ;永远不要使用UTF-8(或简称N'DUUH!);或者将后悔。
<强>硬强>
答案 1 :(得分:8)
UTF-8很受欢迎,因为它为处理非英文字符带来了理智。它支持各种非英语字母表,如阿拉伯语或中文。如果您的应用程序有志于本地化为其他语言,UTF-8肯定会为您节省许多麻烦。只需搜索“字符编码”,您就会看到其中有多少。
除此之外,我建议您出于性能原因尽量缩短主键(理想情况下是数字键)。
答案 2 :(得分:1)
答案 3 :(得分:1)
UTF-8是一个可变字节编码,具有用于字符的字节数,具体取决于该特定字符。对于使用7位ASCII编码的字符(大致是英文字母数字和一些标点符号),只有一个字节用于UTF-8编码(实际上它是相同的字节)。如果你正在谈论“latin1”,因此可能会考虑一些重音字符,那么那些只会是2字节的UTF-8字符。
所以,当你说“每个使用utf-8的字符是3个字节”时你就不对了 - 除非你在谈论不是latin1中的异国字符。
UTF-8将允许您将来使用更广泛的字符,对于英文文本,占用很少(如果有)额外空间。
答案 4 :(得分:1)
这听起来不对。如果使用Latin-1字符集中的字符,则字符不会使用三个字节作为UTF-8。大多数字符将使用单个字节,也许少数字符将使用两个字节。我没有检查过,但我怀疑Latin-1字符集中的任何字符都会使用三个字节作为UTF-8。
当您需要存储各种各样的字符时,Unicode非常有用。例如,您可以在同一字段中存储英语,中文,希腊语,俄语和希伯来语文本,这是任何单字节编码都无法实现的。