如何在MySQL中设置年份数据类型

时间:2011-04-18 23:00:12

标签: php mysql sql types phpmyadmin

我无法理解这个sql语句中的错误

INSERT INTO tbl_car_model_year_rate
SET car_model_id =4,
FROM =2008,
TO =2011,
with_driver =1,
per_day =1000,
ten_days =10000,
twenty_days =20000,
thirty_days =30000,
image =  '1303166512test.jpg',
created_at = NOW( ) ,
created_by =1

数据类型

car_model_id    int(11) 
image   text        
from    year(4)
to  year(4)
with_driver tinyint(1)          
per_day int(11) 
ten_days    int(11) 
twenty_days int(11)
thirty_days int(11)
created_at datetime 
created_by int(11)

错误消息

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from  =2008, to   =2011, with_driver =1, per_day  =1000, ten_days =10000,     twenty' at line 1

4 个答案:

答案 0 :(得分:4)

您正在使用保留字作为列名。

  

某些单词,例如SELECT,DELETE,   或BIGINT保留并要求   特殊处理用作   表和列等标识符   名。这也可能适用于   内置函数的名称。

     

允许使用保留字   标识符,如果您引用它们   在Section 8.2, “Schema Object Names”中描述:

有关保留字的更详细列表,包括版本之间的差异,请参阅Reserved Words in MySQL 5.5

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

答案 1 :(得分:4)

如果您将代码更改为:

INSERT INTO tbl_car_model_year_rate SET car_model_id =4,
`FROM` =2008,
`TO` =2011,
with_driver =1,
per_day =1000,
ten_days =10000,
twenty_days =20000,
thirty_days =30000,
image =  '1303166512test.jpg',
created_at = NOW( ) ,
created_by =1

它会起作用。 如果你在反引号“`”中添加字段和/或表名,那么你可以使用任何名称。

失败原因
FROM是保留字(如select * FROM tablename) 使用FROM作为列名select * FROM FROM WHERE FROM = AND

,您会混淆MySQL

我的推荐
不要在字段名中使用保留字 将列名从FROM更改为YearFromStartYear
TOYearToEndYear

使用保留字作为列名只是简单的混淆,并且在所有内容中添加反引号只会使内容难以阅读和丑陋而且仍然令人困惑。

答案 2 :(得分:1)

TO和FROM是保留字,你应该把它放在像'FROM','TO'这样的单个qoute中。

并且记住在生成表时避免对列使用保留字,请参阅以下链接以获取mysql保留字的完整参考

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

答案 3 :(得分:0)

以下是在MySQL中正确使用年份字段的示例:

MySQL: adding current year as a default value for a field 'year'