我的数据库中的大多数表都具有类型为varchar的数据,并将长度设置为36,用于填充本机创建的GUID。 varchar是最合适的数据类型来存储guid值或mysql中的任何其他类型? PLZ解释mysql数据类型
回答
这是一个很好的问题。我在很多地方看到,他们使用varchar来表示不同类型的ID,看起来像数字。那么为什么不使用整数?嗯,根据我的经验,主要有三种情况:
虽然他们是数量,他们可能会过大。例如,对于32位数的数字(64位无符号整数的最大值为20位),您将无法使用整数(即使是64位大整数)。
某些数字有特殊的格式。例如,电话号码可能如下所示:+44(12)3456789。现在显然,+,(和)不是数字的一部分,您可以在没有它们的情况下调用该数字,但这是通常的格式,所以对于整数变量,您将无法存储该数字。
在未来你可能会改变你的ID,包括字母,所以这是一个很好的做法,允许从一开始的信件,以避免以后改变数百万条记录。
希望有所帮助。
您可能想查看PROCEDURE ANALYSE。它可以帮助根据表中已经存在的内容建议适当的数据类型。
这里是一个blog post也谈到PROCEDURE分析和可能会有所帮助。
我的意思是,VARCHAR允许要使用的每个字符,并且通常由像数数据类型溢出防止。所以......好吧,如果你希望你的GUID在数字字符之外包含大的值或值,那么你就是金。
如果您的GUID总是长度为36且不为空,请使用CHAR而不是VARCHAR。它将节省空间,因为VARCHAR必须为每一行存储一个长度前缀。
另外,如果您的所有列的长度固定,它会因为数据库能更高效地扫描行增加在某些情况下的性能。
这一切都取决于你的意思是“最合适”的。
varchar(36)的优点是简单。您可以按原样存储GUID,并轻松将其读回。
但是,如果你担心的磁盘空间量,列占用,那么你有几个选择:
VARCHAR(36)= 37个字节 CHAR(36)= 36个字节 CHAR( 32)= 32字节(只是删除连字符) 二进制(16)= 16字节(删除连字符和unhex GUID以获得二进制字符串)
所以,如果你担心磁盘空间,你会发现二进制(16)比varchar(36)好得多。
这里是在MySQL得到一个二进制(16)字符串从一个GUID的一个例子:
unhex(replace(uuid(),'-',''))
- 1. MySQL数据类型?
- 2. Wakanda MySQL TEXT数据类型
- 3. mySQL数据类型 - int(11)
- 4. MySQL表数据类型
- 5. MySQL数据类型TINYINT(4)
- 6. Mysql TimeStamp数据类型
- 7. Mysql数据类型为钱
- 8. MySQL CHAR数据类型
- 9. MySQL的JSON数据类型
- 10. C#数据类型与MySql数据类型
- 11. MySQL的:操作与TIME数据类型
- 12. 等价于Vertica'Interval'数据类型的Mysql
- 13. Mysql点数据类型&glength返回null
- 14. 为MySQL选择数据类型?
- 15. MySQL外键数据类型错误
- 16. MySQL数据类型的问题
- 17. MySQL 5星评级数据类型?
- 18. MySql中的间隔数据类型
- 19. MySQL位数据类型存储空间
- 20. MySQL数据类型“int”超出限制
- 21. 最好的MySQL数据类型
- 22. MySQL数据类型:int与enum
- 23. mysql BLOB和TEXT数据类型差异
- 24. MySQL不接受某些数据类型
- 25. SSIS MYSQL到SQL数据类型
- 26. 在MySQL中使用`set`数据类型
- 27. 时间数据类型 - MySQL的
- 28. 保存DATETIME数据类型到MySQL
- 29. unix_timestamp(MySQL)的数据类型是什么?
- 30. MySQL中国家的数据类型
请问你的GUID是什么样子? – Tobias 2011-01-12 14:55:35