执行脚本出现Invalid default value for ‘sex‘的解决方案

文章讨论了在MySQL中使用`source`执行包含中文的SQL脚本时遇到的非法错误,原因在于脚本的字符集(如记事本的ANSI)与数据库的UTF8不兼容。解决方法是确保脚本和数据库的字符集设置一致,推荐数据库默认为UTF8,编辑器如记事本、vi/vim选择UTF8编码。
摘要由CSDN通过智能技术生成

在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脚本文件的编码的字符集和数据库及表的字符集一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值