在mysql中,使用source执行SQL脚本时,如果在脚本中有中文,很可能出现值“非法”的问题。
脚本内容如下:
create table if not exists t_std(
id bigint primary key,
name varchar(50) not null,
sex char(1) default '男',
tel char(11) unique
)engine=InnoDB default charset=utf8;
执行脚本时可能会提示Invalid default value for 'sex'。
脚本中已经设置的表格的默认字符集为utf8应该是可以支持中文的,但为什么在执行脚本时却总提示默认值非法呢。其原因在于编写脚本时使用的编辑工具使用的是什么字符集编码。如果时在“记事本”中完成的编辑的,通常记事本的编码字符集为“ANSI”,这会脚本中的中文编码为“ANSI”,而如果设置数据库或表的字符集为UTF8,在存在编码不兼容的问题。因此在执行脚本时才会提示设置的默认值非法,同样在插入或者其他操作脚本文件中涉及到中文时、都会提示“值非法”。所以在记事本中保持文件时,应注意文件的编码要和数据库设置的编码一致。最通用的解决方案就是将数据库的默认字符集设置为UTF8,同时记事本编辑脚本时也应选择编码为UTF8,这样在脚本中出现中文才不会出现值非法的问题。
另外如果脚本文件在linux下用vi或vim进行编辑,应提前设置好vi或vim的编码方式。保证SQL脚本文件的编码的字符集和数据库及表的字符集一致。