sql语句中ALTER TABLE MODIFY和ALTER TABLE CHANGE的区别?

sql语句中ALTER TABLE MODIFY和ALTER TABLE CHANGE的区别?,第1张

modify能修改字段类型和约束,而change不能。

change用来字段重命名,不能修改字段类型和约束;

modify不用来字段重命名,只能修改字段类型和约束;

试验比较:

1、字段重命名:

1)change

mysql>alter table t1 change number id char(2)

Query OK, 0 rows affected (0.08 sec)

Records: 0 Duplicates: 0 Warnings: 0

2)modify

mysql>alter table t1 modify id num int(2)

ERROR 1064 (42000): You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'num int(2)' at line 1

mysql>

结论:能用change重命名,而modify不能。

2、修改字段类型和约束

1)modify

mysql>alter table t1 modify id int(2)

Query OK, 0 rows affected (0.06 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>alter table t1 modify id int(2) not null

Query OK, 0 rows affected (0.08 sec)

Records: 0 Duplicates: 0 Warnings: 0

2)change

mysql>alter table t1 change id char(2)

ERROR 1064 (42000): You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'char(2)' at line 1

mysql>alter table t1 change id char(2) not null

ERROR 1064 (42000): You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'char(2) not null' at line 1

结论:modify能修改字段类型和约束,而change不能。

最终结论:change用来字段重命名,不能修改字段类型和约束;

modify不用来字段重命名,只能修改字段类型和约束;

对于在MySQL中alter语句中的change和modify的使用情景,以下稍作总结,与大家共享,嘿嘿~~~

参考mysql5.5手册,可以使用CHANGE old_col_name column_definition子句对列进行重命名。重命名时,需给定旧的和新的列名称和列当前的类型。

事例:

例如:要把一个INTEGER列的名称从a变更到b,您需要如下 *** 作:

mysql>ALTER TABLE t1 CHANGE a b INTEGER

事例:

如果您想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的。例如:

mysql>ALTER TABLE t1 CHANGE b b BIGINT NOT NULL

您也可以使用MODIFY来改变列的类型,此时不需要重命名:

mysql>ALTER TABLE t1 MODIFY b BIGINT NOT NULL

关于何时使用change,何时使用modify,其实都是无可厚非的,最主要是个人的习惯。

在笔者看来,当需要修改字段名称时使用change;当需要修改字段类型时使用modify,毕竟modify还是比change少写个字段名称的,因次还是比较节约系统资源的额 ^_^

首先这是我一开始的Ubuntu 下MySQL默认字符集(下图),在Java中输入中文到数据库中全是乱码问号,MySQL不识别,是因为MySQL默认的字符集是latin1(ISO_8859_1)不是utf8的字符集。

修改方法:

1.打开my.cnf文件进行修改(这里注意下,MySQL版本是5.5以上的,以下版本应该也通用,具体没有测试过,但在5.5以上的绝对可行)

sudo gedit /etc/mysql/my.cnf

2.在[mysqld]下添加如下代码(对于5.5以上版本,[mysqld]的default字符集设置已经是遗弃的参数,可以使用这几个,具体查看相应版本的手册)

character-set-server=utf8

collation-server=utf8_general_ci

skip-character-set-client-handshake

3.退出重启mysql服务

sudo service mysql restart

4.进入mysql查看字符集

mysql>show variables like 'collation_%'

mysql>show variables like 'character_set_%'


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7279752.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存