mysql中的varchar类型 MySQLSQL
程序员文章站
2024-02-27 23:46:57
...
最近在做项目的时候,发现了一个奇怪的现象。
做项目的时候,使用的Mysql版本是5.0,varchar类型给定长度10。
一点问题也没发现。
但是到了客户那边,使用的Mysql版本是5.1,马上就出错了。
调试的过程中,也考虑过是数据库版本的问题。
但是一直都没有证实。
看了下mysql参考手册,证实了我的猜测。
mysql5.0:在VARCHAR列中的值是变长字符串。VARCHAR值只存储所需的字符,外加一个字节记录长度,值不被填补;相反,当值被存储时,拖后的空格被删去。(这个空格删除不同于ANSI SQL规范。)
/********************************************************************/
mysql5.1:VARCHAR列中的值为可变长字符串。VARCHAR值保存时只保存需要的字符数,另加一个字节
来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
mysql5.0会自动去掉尾部的空格,而5.1不会,会存储到数据库中。
而我们的问题也正出在这。用5.0时,从页面获得字段时,尾部多了个空格。超出了10位,但是自动被去掉
了。客户那边的空格却被保存了。所以就出错了。
大家一定要注意Mysql的版本问题啊!!!!!!!!
做项目的时候,使用的Mysql版本是5.0,varchar类型给定长度10。
一点问题也没发现。
但是到了客户那边,使用的Mysql版本是5.1,马上就出错了。
调试的过程中,也考虑过是数据库版本的问题。
但是一直都没有证实。
看了下mysql参考手册,证实了我的猜测。
mysql5.0:在VARCHAR列中的值是变长字符串。VARCHAR值只存储所需的字符,外加一个字节记录长度,值不被填补;相反,当值被存储时,拖后的空格被删去。(这个空格删除不同于ANSI SQL规范。)
/********************************************************************/
mysql5.1:VARCHAR列中的值为可变长字符串。VARCHAR值保存时只保存需要的字符数,另加一个字节
来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
mysql5.0会自动去掉尾部的空格,而5.1不会,会存储到数据库中。
而我们的问题也正出在这。用5.0时,从页面获得字段时,尾部多了个空格。超出了10位,但是自动被去掉
了。客户那边的空格却被保存了。所以就出错了。
大家一定要注意Mysql的版本问题啊!!!!!!!!