Gen*_*nik 10 mysql database-design utf-8 latin1
我知道MySQL有默认的latin1编码,显然需要1个字节来存储latin1和3个字节的字符来存储utf-8中的字符- 这是正确的吗?
我正在开发一个我希望将在全球范围内使用的网站.我绝对需要utf-8吗?或者我可以使用latin1逃脱?
此外,我试图将一些表从latin1更改为utf8,但我收到此错误:
Speficief key was too long; max key length is 1000 bytes
有没有人知道这个解决方案?我应该真的解决这个问题,还是拉丁1就够了?
谢谢,亚历克斯
Qua*_*noi 10
在latin1中存储一个字符需要1个字节,在utf-8中存储一个字符需要3个字节 - 这是正确的吗?
这需要1字节来存储一个latin1字符,并1以3字节来存储一个UTF8字符.
如果您只在字符串中使用基本的拉丁字符和标点符号(0到128中Unicode),则两个字符集将占用相同的长度.
此外,我试图将一些表从latin1更改为utf8,但我收到此错误:"Speficief密钥太长;最大密钥长度为1000字节"有谁知道解决方案?我应该真的解决这个问题,还是拉丁1就够了?
如果你有一个VARCHAR(334)或更长的列,MyISAM不要让你在它上面创建一个索引,因为列很可能占用更多的1000字节.
请注意,这种长度的键很少有用.您可以创建一个前缀索引,该索引几乎与任何实际数据一样具有选择性.
至少我建议使用UTF-8.如今,您的数据将与其他所有数据库兼容,因为其中90%以上是UTF-8.
如果您使用LATIN1/ISO-8859-1,您可能会因为数据不支持国际字符而无法正确存储数据......因此您可能遇到类似于此图像左侧的内容:

如果你使用UTF-8,你不需要处理这些令人头疼的问题.
关于您的错误,听起来您需要优化您的数据库.考虑一下:http://bugs.mysql.com/bug.php?id = 4541#c284415
如果你给它有助于具体对这个问题您的表结构和列.